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

问题描述:

我有两个列表:
list = ["a","b","c","d"]
i_to_skip = [0,2]的Python:打印列表项不在单独的索引列表

我想list打印一切,除了为i_to_skip指数。我试过以下,刚刚返回一个发电机对象:

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

+0

你想如何格式化输出。每行一个项目? – 2014-10-28 18:37:26

你的理解做的工作是x,像"a"究其原因,不是指数,像0,当然"a"不在[0, 2]

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

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') 

最后,作为一个侧面说明,呼唤你的列表list是一个坏主意;它隐藏了可能稍后需要使用的类型/构造函数,并且还会导致代码误导。

+0

谢谢!并感谢所有的附加信息。不用担心,我的列表实际上并不是名为'list',仅仅用于这个例子 – 2014-10-28 18:45:52

+1

当我在阅读这篇文章时,我一直在想“这个答案还应该提到____”,只是向下滚动一下并看到它提及。布拉沃。 – 2014-10-28 18:46:33

+0

@KarlKnechtel:我的编辑速度可能足以跟上你的阅读速度。 :) – abarnert 2014-10-28 18:58:07

您的打印结果是发电机,你需要把你的列表中理解列表中的符号([]),或使用list()功能, 还需要检查的指标没有值,所以你自己看着办吧与enumerate()

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

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

你不应该打电话给你的列表list或者你隐藏的list类型本身。

enumerate会给你列表的索引和相应的元素。

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