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

2024-04-16 04:49:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个列表:
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)


Tags: to对象in内容列表forifnot
3条回答
mylist = ["a","b","c","d"]
print([x for i,x in enumerate(mylist) if i not in i_to_skip])

您不应该调用列表list,或者您正在隐藏list类型本身。你知道吗

^{}将为您提供列表的索引和相应元素。你知道吗

将理解放在方括号中,可以将其放入一个列表中,这比生成器更容易打印。你知道吗

打印结果是一个生成器,您需要将列表理解放在列表符号([])中或使用list()函数, 您还需要检查索引而不是值,这样您就可以用^{}来计算:

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

你的理解之所以有效是因为x,比如"a",而不是索引,比如0,当然"a"不在[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')

最后,顺便说一句,调用listlist是个坏主意;它隐藏了类型/构造函数,以后可能会用到它,而且还会使代码产生误导。你知道吗

相关问题 更多 >