从列表转换元组



我在将列表转换为元组时遇到问题。

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')]

这与上面的不一样。如何仅删除数字的引号。

看看

这个单行解决方案

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

您必须将第一个元素显式转换为整数:

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')]
list1 = []
for elements in student:
    year, name = elements.split(" ", 1)
    list1.append((int(year), name)

引号之所以存在,是因为您拥有的数字采用字符串格式。 您需要将它们更改为 int((。

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

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

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

另一种方法是运行一个额外的循环来实现这一点,但是,两个国有企业都是同一件事。

另一个单行解决方案:

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))

尝试:

split_lists = [data.split(" ") for data in student]
students_list = [tuple([int(data[0]), data[1]]) for data in split_lists]
print(students_list)

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

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)

最新更新