的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)
你的理解做的工作是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
是一个坏主意;它隐藏了可能稍后需要使用的类型/构造函数,并且还会导致代码误导。
谢谢!并感谢所有的附加信息。不用担心,我的列表实际上并不是名为'list',仅仅用于这个例子 – 2014-10-28 18:45:52
当我在阅读这篇文章时,我一直在想“这个答案还应该提到____”,只是向下滚动一下并看到它提及。布拉沃。 – 2014-10-28 18:46:33
@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
会给你列表的索引和相应的元素。
将理解放在方括号内,使其成为一个列表,比列表更容易打印。
你想如何格式化输出。每行一个项目? – 2014-10-28 18:37:26