[英]Python 3 - list inside dictionary, if list contains a 3rd item do this
[英]Filtering a list and the printing the 3rd value in the filtered list in Python
這感覺像是一件非常基本的事情,但我已經為此苦苦掙扎了好幾個小時。
我有一個包含值的列表。 我想過濾該列表,只留下其中包含“a”的值。 然后從該列表中我想打印第三個值。 出於某種我不明白的原因,它不起作用。
幫助表示贊賞! 謝謝!
mylist = ['plane','dog','car','planet','mat']
mylist_words_with_a = filter(lambda word: 'a' in word, mylist)
third_of_mylist_with_a = mylist_words_with_a[2]
print(third_of_mylist_with_a)
您可以使用filter
過濾帶有“a”的元素。 我在這里使用set
方法來檢查包含。 然后使用islice
獲取filter
生成器的第 n 個元素。 這可以在您獲得所需元素后立即停止(假設您有 1000 個元素,一旦找到包含 a 的第三個元素,就無需評估剩余元素):
mylist = ['plane','dog','car','planet','mat']
from itertools import islice
next(islice(filter({'a'}.issubset, mylist), 2, 3))
output: 'planet'
filter
返回一個可迭代的。 因此,您需要將內容包裝到一個列表中以使過濾器實際執行並使用[]
運算符訪問第三個元素。
mylist = ['plane','dog','car','planet','mat']
mylist_words_with_a = filter(lambda word: 'a' in word, mylist)
third_of_mylist_with_a = list(mylist_words_with_a)[2]
print(third_of_mylist_with_a)
或者,您可以使用itertools.islice()
來避免整個列表被過濾並復制到其他列表中。 如果源列表是一個大數據集,最好使用迭代器,以提高性能並避免不必要的 memory 分配。
import itertools
mylist = ['plane','dog','car','planet','mat']
mylist_words_with_a = filter(lambda word: 'a' in word, mylist)
third_of_mylist_with_a = next(itertools.islice(mylist_words_with_a, 2, 3))
print(third_of_mylist_with_a)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.