用户输入元组列表?

时间:2017-04-16 22:44:13

标签: python-3.x

如果有任何帮助,我正在使用spyder对此项目进行编码。

我试图接受用户输入:(a,a),(b,b),(c,c),(d,d)

并将元组存储到如下列表中:[('a','b'),('b','b'),...等

我尝试用逗号分割,但之后它会分组中间元组和错误。

我该怎么做呢?

3 个答案:

答案 0 :(得分:1)

这是(我相信)你想要的。我只是在括号i.split('),(')之间的逗号处拆分,然后删除现在不需要的括号并在剩余的逗号中拆分。 (抱歉,内联格式化可能很奇怪)。

这假设您的输入中没有空格。如果可能你必须去除那些。 i = i.replace(' ', '')

i = '(a,a),(b,b),(c,c),(d,d)' # i = input('Enter a list of tuples: ')

l = []

for tup in i.split('),('):
    #tup looks like `(a,a` or `b,b`
    tup = tup.replace(')','').replace('(','')
    #tup looks like `a,a` or `b,b`
    l.append(tuple(tup.split(',')))

print(l)

这会返回[('a', 'a'), ('b', 'b'), ('c', 'c'), ('d', 'd')]

答案 1 :(得分:1)

你可以通过步骤分解它。我保留了字符串,因为这是你提供的例子。但是如果你知道输入将是什么,你可以强制它在列表理解中是整数。

import re

input = '(a,a),(b,b),(c,c),(d,d)'
breakdown = re.findall('\(.*?,.*?\)', input)
tup_ls = []
for i in breakdown:
    tup_ls.append(tuple([x for x in i[1:-1].split(',')]))

答案 2 :(得分:0)

t = list(tuple(map(int,input().split())) for r in range(int(input('enter no of rows : ')))) 
print(t)

输入:3

1 2
3 4
5 6
Output => [(1, 2), (3, 4), (5, 6)]

map在某些情况下比列表理解要花费更少的时间和更少的内存。当我计算地图所花费的时间时,它比列表理解所花费的时间要少,因此省时。