[英]Python: Print List Items Not in Separate Index List
我有两个清单:
list = ["a","b","c","d"]
i_to_skip = [0,2]
除了i_to_skip
的索引,我想打印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()
函数中,还需要检查索引而不是值,因此可以使用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
将为您提供列表的索引和相应元素。
将理解内容放在方括号中会使其成为一个列表,比生成器更容易打印。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.