[英]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.