从列表中转换元组

时间:2017-05-28 12:35:57

标签: python string

我无法将列表转换为元组。

student = ['1712 Albert', '1703 Benny', '1799 Henry']

我希望它是

[(1712, 'Albert'), (1703, 'Benny'), (1799, 'Henry')]

到目前为止,我已经完成了这个

list1 = []
for elements in student:
    list1.append(tuple(elements.split(" ")))

但是我得到了输出:

[('1712', 'Albert'), ('1703', 'Benny'), ('1799', 'Henry')]

与上述不同。如何删除数字的引号。

7 个答案:

答案 0 :(得分:1)

看看这个单行解决方案

student = ['1712 Albert', '1703 Benny', '1799 Henry']
list1 = [ (int(year),name ) for year,name in [ x.split(" ") for x in student ] ]

答案 1 :(得分:0)

您必须明确地将第一个元素转换为整数:

list1 = []
for elements in student:
    id_, name = elements.split(None, 1)
    list1.append((int(id_), name))

我稍微更新了str.split()调用:None告诉命令拆分任何空格,无论有多少个字符(包括标签和换行符) 。 1告诉str.split()只拆分一次,在名称中留下空格。因此"1703 Albert Ben"在输出中会变为(1703, 'Albert Ben')

演示:

>>> student = ['1712 Albert', '1703 Benny', '1799 Henry']
>>> list1 = []
>>> for elements in student:
...     id_, name = elements.split(None, 1)
...     list1.append((int(id_), name))
...
>>> list1
[(1712, 'Albert'), (1703, 'Benny'), (1799, 'Henry')]

答案 2 :(得分:0)

list1 = []
for elements in student:
    year, name = elements.split(" ", 1)
    list1.append((int(year), name)

答案 3 :(得分:0)

引号是因为您拥有的数字是字符串格式。你需要将它们改成int()。

l=[]
for element in list:
    i=element.split(' ')
    z=tuple(int(i[0]),i[1])
    l.append(z)

答案 4 :(得分:0)

您可以像这样修改代码,将第一个元素转换为整数,然后将它们处理成元组。

for elements in student: 
    split_elements = elements.split(" ")
    split_elements[0] = int(split_elements[0])
    list1.append(tuple(split_elements))

另一种方法是运行一个额外的循环来实现这一目标,但是,两者都是相同的。

答案 5 :(得分:0)

另一个单行解决方案:

student = ['1712 Albert', '1703 Benny', '1799 Henry']    
list(map(lambda x:tuple(map(lambda y:int(y) if y.isnumeric() else y,x.split())),student))

答案 6 :(得分:0)

尝试:

split_lists = [data.split(" ") for data in student]

students_list = [tuple([int(data[0]), data[1]]) for data in split_lists]

print(students_list)

您只需将数字字符串转换为整数即可。如果您并不总是确信转换后的字符串是数字,则可以在转换为students_list时使用try-except填充int(),如下所示:

students_list = list()

for data in split_lists:
    sub_list = list()
    try:
        sub_list.append(int(data[0]))
    except ValueError:
        sub_list.append(data[0])
    sub_list.append(data[1])
    students_list.append(tuple(sub_list))

print(students_list)