Python:打印列表项不在单独的索引列表中

时间:2014-10-28 18:35:03

标签: python list

我有两个清单:
list = ["a","b","c","d"]
i_to_skip = [0,2]

除了list中的索引外,我想在i_to_skip中打印所有内容。我尝试过以下操作,它只返回一个生成器对象:

print(x for x in list if x not in i_to_skip)

3 个答案:

答案 0 :(得分:3)

您的理解能够发挥作用的原因是x,如"a",而不是索引,例如{{1} },当然0不在"a"

要获取索引以及值,您需要enumerate。然后你可以这样做:

[0, 2]

另外,请注意,打印生成器表达式(正如您所做的)只是打印print([x for i, x in enumerate(list) if i not in i_to_skip]) 之类的内容;这就是为什么我将你的代码转换为打印列表理解,所以你得到了<generator object <genexpr> at 0x1055fd8b8>


如果您想要一次打印一行,则可以循环生成器表达式:

['b', 'd']

但实际上,将它折叠成一个循环更容易:

for x in (x for i, x in enumerate(list) if i not in i_to_skip):
    print(x)

或者,甚至更简单,将整个事物格式化为单个表达式,可能是这样的:

for i, x in emumerate(list):
    if i not in i_to_skip:
        print(x)

...甚至让print('\n'.join(x for i, x in enumerate(list) if i not in i_to_skip)) 为你做这件事:

print

最后,作为附注,调用您的列表print(*(x for i, x in enumerate(list) if i not in i_to_skip), sep='\n') 是一个坏主意;它隐藏了类型/构造函数,它可能希望稍后使用,它也会使你的代码产生误导。

答案 1 :(得分:2)

您的打印结果是生成器,您需要将列表理解放在列表符号([])或使用list()函数中, 您还需要检查索引而不是值,因此您可以使用enumerate()

来计算出来
>>> print ([j for i,j in enumerate(list) if i not in i_to_skip] )
['b', 'd']

答案 2 :(得分:2)

mylist = ["a","b","c","d"]
print([x for i,x in enumerate(mylist) if i not in i_to_skip])

您不应该调用列表list,也不要隐藏list类型本身。

enumerate将为您提供列表的索引和相应元素。

将理解放在方括号中使其成为一个列表,比生成器更容易打印。