List comprehension returning values plus [None, None, None], why?
本问题已经有最佳答案,请猛点这里访问。
我在学习理解。我得到了打印(X)部分。它会打印通过"in"测试的x值),但为什么之后它还会返回一个"none"列表?
1 2 3 4 5 6 7 8 | >>> g ['a', 'x', 'p'] >>> [print(x) for x in g] a x p [None, None, None] #whats this? |
在python2中,
使用列表理解打印列表中的项目,然后打印列表本身。尝试将列表分配给变量。
1 2 3 4 5 6 7 8 | >>> g ['a', 'x', 'p'] >>> x = [print(x) for x in g] a x p # |
现在列表为x,不打印。名单还在那里…
1 2 3 4 | >>> print(x) [None, None, None] >>> x [None, None, None] |
1 | [print(x) for x in g] |
相当于:
1 2 3 4 | l = [] for i in g: l.append(print(i)) return l |
print做打印工作,所以你看到a,x和p,但它返回
我认为您将列表理解与str.join方法混为一谈。
列表理解总是产生一个新的列表。可以生成三种方法列表,与
1 2 3 4 5 6 | >>> [x for x in 'axp'] ['a', 'x', 'p'] >>> [x[0] for x in ['alpha', 'xray', 'papa']] ['a', 'x', 'p'] >>> list('axp') ['a', 'x', 'p'] |
由于
1 2 3 | >>> g=['a', 'x', 'p'] >>> ''.join(g) 'axp' |
要打印它,只需使用所需分隔符的join:
1 2 3 4 5 | >>> print(' '.join(g)) a x p |
如果列表中的元素与字符串join不兼容,则需要使用理解:
1 2 3 4 5 6 7 8 9 10 11 | >>> li=[1,2,3] >>> ' '.join(li) Traceback (most recent call last): File"<stdin>", line 1, in <module> TypeError: sequence item 0: expected str instance, int found >>> print(' '.join(str(e) for e in li)) 1 2 3 |