为什么列表理解语句出现错误?

时间:2018-10-21 01:53:45

标签: python list syntax-error list-comprehension

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)姓名的列表中的数字。

1 个答案:

答案 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