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

Python:打印不在单独索引列表中的列表项,python,list,Python,List,我有两个列表: list=[“a”、“b”、“c”、“d”] i_to_skip=[0,2] 我想打印列表中的所有内容,除了I_to_skip中的索引。我尝试了以下操作,它只返回一个生成器对象: print(如果x不在i_to_skip中,那么x代表列表中的x)你的理解之所以有效,是因为x是值,比如“a”,而不是索引,比如0,当然“a”不在[0,2]中 要获得索引和值,您需要。然后你可以这样做: print([x for i, x in enumerate(list) if i not in i

我有两个列表:
list=[“a”、“b”、“c”、“d”]

i_to_skip=[0,2]

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


print(如果x不在i_to_skip中,那么x代表列表中的x)

你的理解之所以有效,是因为
x
是值,比如
“a”
,而不是索引,比如
0
,当然
“a”
不在
[0,2]

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

print([x for i, x in enumerate(list) if i not in i_to_skip])
另外,请注意,打印生成器表达式(正如您所做的那样)只会打印类似于
;这就是为什么我将您的代码转换为打印列表理解,所以您得到的是
['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(*(x for i, x in enumerate(list) if i not in i_to_skip), sep='\n')


最后,顺便说一句,调用列表
list
是个坏主意;它隐藏了以后可能要使用的类型/构造函数,也会使您的代码产生误导。

您的打印结果是一个生成器,您需要将列表理解放在列表符号(
[]
)中或使用
列表()
函数, 此外,您还需要检查索引,而不是值,这样您就可以通过以下方法来解决:

你不应该调用你的列表
list
,或者你隐藏了
list
类型本身

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


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

您希望输出的格式如何。每行一件?谢谢!谢谢你提供的更多信息。不用担心,我的列表实际上并不是名为
list
,这只是为了这个例子。当我读到这个时,我一直在想“这个答案真的应该提到”\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。太好了。@KarlKnechtel:我可能编辑的速度刚好能跟上你的阅读速度。:)@Adam_G:在例子中使用它可能更糟糕。在真实代码中,至少可以知道真实代码是否需要使用实际的
列表
构造函数;举个例子,人们不得不担心它是否会以某种方式影响你的问题……加入一个列表会更有效率。
>>> 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])