transfers = [['owen', 'susan', '10'], ['owen', 'robert', '10'], ['owen','drew', '10'], ['fred', 'owen', '20']]
people = ['drew', 'fred', 'owen', 'robert', 'susan']
bals = [0]*len(people)
for p in people:
bals[k for k in range(len(people))] = [i[2] for i in transfers if p in i]
^
SyntaxError: invalid syntax
为什么会出现此错误?
i在转移中的i [2]应该是“转移”列表中的数字,而我只希望它是包含循环中某个人(p)姓名的列表中的数字。
答案 0 :(得分:3)
应该是
for i, p in enumerate(people):
bals[i] = [t[2] for t in transfers if p in t]
或者,
bals = [[t[2] for t in transfers if p in t] for p in people]
您的代码不起作用,因为列表订阅不接受列表理解。
此外,列表订阅确实接受generator
。将列表理解放在括号内可以生成一个生成器。按照语法的正确代码可能是bals[(k for k in range(len(people)))]
,其中中间是generator
对象。但是生成器仍然无法与列表一起使用,因此它是TypeError
。