Skip to main content

How to Create Tuples and Sets from User Input in Python

This guide explains how to create tuples and sets in Python from user-provided input. We'll cover different input formats (space-separated, comma-separated, and direct Python literal input), and we'll discuss how to handle type conversions and potential errors.

Creating Tuples from Space-Separated Input

The most common way to get a tuple from user input is to have the user enter space-separated values, split the input string, and then convert the resulting list to a tuple.

Tuples of Strings

user_input = input('Enter space-separated words: ')
my_tuple = tuple(user_input.split()) # Split on whitespace, convert to tuple
print(my_tuple)

Output:

Enter space-separated words:  tutorial reference com
('tutorial', 'reference', 'com')
  • input() gets a string from the user.
  • user_input.split(): Splits the input string at each whitespace character (space, tab, etc.), returning a list of strings.
  • tuple(...): Converts the list of strings to a tuple.

Tuples of Integers

If you expect the user to enter numbers, convert each element to an integer before creating the tuple:

user_input = input('Enter space-separated integers: ')
my_tuple = tuple(int(item) for item in user_input.split())
print(my_tuple)

Output:

Enter space-separated integers: 10 20 30
(10, 20, 30)
  • (int(item) for item in ...): This is a generator expression. It's like a list comprehension, but it produces values on demand instead of creating an entire list in memory. It's very efficient.
  • The generator expression converts each element into an integer.
  • The result is then passed to the tuple() constructor.
  • Error Handling: This code will raise a ValueError if the user enters anything that can't be converted to an integer. You should add error handling.

Creating Tuples from Comma-Separated Input

If you want the user to separate values with commas instead of spaces, change the argument to split():

my_tuple = tuple(input('Enter comma-separated words: ').split(','))
print(my_tuple)

Output:

Enter comma-separated words: tutorial,reference,com
('tutorial', 'reference', 'com')
  • The split(',') method will split the string at the comma , character.

For integer input:

user_input = input('Enter comma-separated integers: ')
my_tuple = tuple(int(item) for item in user_input.split(','))
print(my_tuple)

Creating Tuples from Direct Python Literal Input (using ast.literal_eval)

If you want the user to enter a Python tuple directly (e.g., (1, 2, 3)), you can use ast.literal_eval(). Important: ast.literal_eval() is much safer than eval(), but you should still be cautious about accepting arbitrary input from untrusted sources.

import ast

try:
input_tuple = ast.literal_eval(input('Enter a valid Python tuple, e.g. ("a", "b"): '))
if isinstance(input_tuple, tuple): # Verify it's actually a tuple
print(input_tuple)
print(type(input_tuple))
else:
print("Input was not a tuple.")
except (ValueError, SyntaxError) as e:
print(f"Invalid input: {e}")

Output:

Enter a valid Python tuple, e.g. ("a", "b"): (1, 'hello', 3.14)
(1, 'hello', 3.14)
<class 'tuple'>
  • ast.literal_eval(): Safely evaluates a string containing a Python literal (like a tuple, list, dictionary, numbers, strings, booleans). It will not execute arbitrary code, unlike eval().
  • Error Handling: The try...except block is essential. ast.literal_eval() will raise a ValueError or SyntaxError if the input is not a valid Python literal. Always handle these errors.
  • It is a good practice to check the type of the returned result using isinstance.

Creating Sets from user Input

You can create set objects using the same principle.

import ast

# String input
my_set = set(input('Enter space-separated words: ').split())
print(my_set) # Output: {'com', 'reference', 'tutorial'} (Order not guaranteed)

# Integer Input
user_input = input('Enter space-separated integers: ')
my_set = set(int(item) for item in user_input.split())
print(my_set) # Output: {1, 2, 3} (Order not guaranteed)

# Using literal_eval (for direct set input)
try:
input_set = ast.literal_eval(input('Enter a valid Python set, e.g. {"a", "b"}: '))
if isinstance(input_set, set):
print(input_set)
print(type(input_set))
else:
print("Input was not a set")
except (ValueError, SyntaxError) as e:
print(f"Invalid input: {e}")
  • The code to create sets is very similar to the one used to create tuples, with the only difference that set() constructor is used instead of tuple().