我在将列表转换为元组时遇到问题。
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)