Skip to content

How to Create Tuples and Sets from User Input in Python

Learn how to convert space-separated, comma-separated, or direct Python literal input into tuples and sets in Python, including type conversion and error handling.

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

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

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)

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().
Navigation