2024-05-16 10:02:08 发布
网友
我有两个列表:list = ["a","b","c","d"]i_to_skip = [0,2]
list = ["a","b","c","d"]
i_to_skip = [0,2]
我想打印list中的所有内容,除了i_to_skip中的索引。我尝试了以下操作,它只返回一个生成器对象:
list
i_to_skip
print(x for x in list if x not in i_to_skip)
mylist = ["a","b","c","d"] print([x for i,x in enumerate(mylist) if i not in i_to_skip])
您不应该调用列表list,或者您正在隐藏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]。你知道吗
x
"a"
0
[0, 2]
要获得索引和值,需要^{}。然后你可以这样做:
print([x for i, x in enumerate(list) if i not in i_to_skip])
另外,请注意,打印生成器表达式(就像您所做的那样)只会打印类似<generator object <genexpr> at 0x1055fd8b8>的内容;这就是为什么我将您的代码转换为打印出一个列表理解,所以您会得到['b', 'd']。你知道吗
<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
print(*(x for i, x in enumerate(list) if i not in i_to_skip), sep='\n')
最后,顺便说一句,调用listlist是个坏主意;它隐藏了类型/构造函数,以后可能会用到它,而且还会使代码产生误导。你知道吗
您不应该调用列表
list
,或者您正在隐藏list
类型本身。你知道吗^{} 将为您提供列表的索引和相应元素。你知道吗
将理解放在方括号中,可以将其放入一个列表中,这比生成器更容易打印。你知道吗
打印结果是一个生成器,您需要将列表理解放在列表符号(} 来计算:
[]
)中或使用list()
函数, 您还需要检查索引而不是值,这样您就可以用^{你的理解之所以有效是因为
x
是值,比如"a"
,而不是索引,比如0
,当然"a"
不在[0, 2]
。你知道吗要获得索引和值,需要^{} 。然后你可以这样做:
另外,请注意,打印生成器表达式(就像您所做的那样)只会打印类似
<generator object <genexpr> at 0x1055fd8b8>
的内容;这就是为什么我将您的代码转换为打印出一个列表理解,所以您会得到['b', 'd']
。你知道吗如果您想打印,比如说,一次打印一行,您可以在生成器表达式上循环:
但实际上,更容易把它折叠成一个循环:
或者,更简单的是,用一个表达式格式化整件事,可能是这样的:
…甚至让
print
为你做:最后,顺便说一句,调用list
list
是个坏主意;它隐藏了类型/构造函数,以后可能会用到它,而且还会使代码产生误导。你知道吗相关问题 更多 >
编程相关推荐