簡體   English   中英

Python:打印列表項不在單獨的索引列表中

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM