Python 如何为行:`中的` for line.split()执行`作为列表理解
我正在尝试使用python理解 我有一份清单,格式如下:Python 如何为行:`中的` for line.split()执行`作为列表理解,python,split,list-comprehension,Python,Split,List Comprehension,我正在尝试使用python理解 我有一份清单,格式如下: name_a:surname_a name_b:surname_b name_c:surname_c 我最初将一行中的每一对拆分为自己的变量的代码是: for lined in self.account: a, b = line.split(':') 我试着使用这种理解,但似乎不起作用: (a,b) = [line.split(':') for line in self.account] 正如@MattDMo所提到的,冒号在
name_a:surname_a
name_b:surname_b
name_c:surname_c
我最初将一行中的每一对拆分为自己的变量的代码是:
for lined in self.account:
a, b = line.split(':')
我试着使用这种理解,但似乎不起作用:
(a,b) = [line.split(':') for line in self.account]
正如@MattDMo所提到的,冒号在您的列表中缺失。如果添加它们,则会出现其他问题。如果打印列表理解返回的列表,它可能如下所示:
[['name_a', 'surname_a\n'], ['name_b', 'surname_b\n'], ['name_c', 'surname_c\n']]
问题是,不能将其分配给两个变量,因为列表中包含的元素数与文件中的行数相同
要获得所需的结果,必须转置二维列表,例如使用zip和解包('*'):
您想做什么?您缺少
行的冒号:
参数。请在列表中拆分。对于self.account中的行,它应该是(a,b)=[line.split(“:”)
意外情况下,冒号不是problem@stilManiac我想检查一下列表,确保所有行都可以拆分,只要行中有冒号,就可以拆分。您可以这样做:all(“:”in line for line in self.account)
zip(*)
?不,列表不正确,请参阅我上面的评论。@MattDMo谢谢,我已经监督了这个问题,但在回答中添加了它。
>>> with open('test_file.txt') as f:
... (a, b) = zip(*[line.split(':') for line in f])
...
>>> a
('name_a', 'name_b', 'name_c')
>>> b
('surname_a\n', 'surname_b\n', 'surname_c\n')