以下列表理解的解释是什么?

时间:2016-12-07 11:36:01

标签: python

input_shape = tuple([i for i in input_shape if i is not None])

我是python的新手,不明白那里发生了什么。 我认为有可能是C的{​​{1}}的模拟,但我无法弄明白。

我试图将它分开来处理小部件以便理解,但它对我来说仍然没有意义。 像那样:

int a = 5 > 2 ? val1 : val2;

5 个答案:

答案 0 :(得分:3)

循环将跳过未通过测试的项目(此处为None)。

input_shape = tuple([i for i in input_shape if i is not None])

# Roughly equivalent to    

result = []
for i in input_shape:
    if i is not None:
        result.append(i)
input_shape = tuple(result)

概念上相同,除了列表理解将更快,因为循环由解释器在内部完成。此外,它显然不会留下result变量。

答案 1 :(得分:1)

i for i部分可以是任何内容,x for xy for y,甚至是Kosmos for Kosmos

>>> input_shape = [1, 2, 3]
>>> input_shape = tuple([i for i in input_shape if i is not None])
>>> input_shape
(1, 2, 3)

在这里你可以看到,它通过循环遍历每个项目将我的列表转换为元组。

查看一个名为list comprehension的事情,因为我很难解释它

答案 2 :(得分:1)

input_shape = [1,2,3,None,5,1]
print(input_shape)
input_shape = tuple([i for i in input_shape if i is not None])
print(input_shape)

O / P

[1, 2, 3, None, 5, 1]
(1, 2, 3, 5, 1)

正如@spectras指出的那样,循环将跳过未通过测试的项目(此处为None)。

答案 3 :(得分:1)

以下是list comprehension

[i for i in input_shape if i is not None]

它仅返回非None

的元素

然后,您调用tuple()将结果列表转换为元组。

使用如下所示的普通for循环可以获得相同的结果:

input_shape = [1, 2, None, 'a', 'b', None]
result = []

for i in input_shape:
    if i is not None:
        result.append(i)

print(result)
# Output: [1, 2, 'a', 'b']

现在,我们将resultlist类型)转换为tuple,如下所示:

final_result = tuple(result)
print(final_result)
# Output: (1, 2, 'a', 'b')

答案 4 :(得分:1)

你几乎与你的分离。内部部分(如果)是你注意到错误的表达式(i),它实际上就在里面。它用括号[]表示它对它的作用;它将这些东西放在一个列表中。 spectras'回答显示了如何使用变量来保存该列表。该构造称为list comprehension