使用标准1行编写列表-Python

使用标准1行编写列表-Python,python,Python,我试图更好地编写更“干净”和/或优雅的代码。我已经看到了一些例子,但我不能让它们适用于这个特定的例子。逻辑非常简单,我希望通过一些标点符号或语法方面的指示,我可以养成这个习惯 a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100] elist = [] evenlist = [i for i in a if a % 2 == 0] print(evenlist) 我只能在以下较长的格式上完成这项工作: a = [1, 4, 9, 16, 25, 36, 49,

我试图更好地编写更“干净”和/或优雅的代码。我已经看到了一些例子,但我不能让它们适用于这个特定的例子。逻辑非常简单,我希望通过一些标点符号或语法方面的指示,我可以养成这个习惯

a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
elist = []

evenlist = [i for i in a if a % 2 == 0]
print(evenlist)
我只能在以下较长的格式上完成这项工作:

a = [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
elist = []


for i in a:
    if i % 2 == 0:
        elist.append(i)

print(elist)
应该是这样的:

evenlist = [i for i in a if i % 2 == 0]
应该是这样的:

evenlist = [i for i in a if i % 2 == 0]
你可能需要检查一个元素的均匀性,而不是整个列表的均匀性。检查列表的均匀性没有多大意义,除非背景中发生了某种魔法,确保列表中的每个元素都是均匀的。但没有:

>>> [1,2,3] % 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for %: 'list' and 'int'
我认为这本身可读性较差,但我怀疑如果您只想处理它们,而不是从中创建列表,可能会更节省空间:

for item in filter(lambda x: x % 2 == 0, a):
    do_something_with(item)
这不会创建一个全新的列表,而只是从现有列表中检索符合筛选条件的值。除非你的清单越来越大,否则可能没什么大不了的

你可能需要检查一个元素的均匀性,而不是整个列表的均匀性。检查列表的均匀性没有多大意义,除非背景中发生了某种魔法,确保列表中的每个元素都是均匀的。但没有:

>>> [1,2,3] % 2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unsupported operand type(s) for %: 'list' and 'int'
我认为这本身可读性较差,但我怀疑如果您只想处理它们,而不是从中创建列表,可能会更节省空间:

for item in filter(lambda x: x % 2 == 0, a):
    do_something_with(item)
这不会创建一个全新的列表,而只是从现有列表中检索符合筛选条件的值。除非您的列表越来越大,否则可能无关紧要。

第一个代码有%2,而第二个代码有i%2,用i%2替换a%2。第一个代码有%2,而第二个代码有i%2,用i%2替换a%2