簡體   English   中英

刪除元組中列表列表中的項目

[英]Remove items within list of lists within tuples

我有一個元組列表,每個元組包含兩個值。 第一個值是字符串列表,第二個值是字符串:

list_of_tuples = [(['this', 'askjsdaddsa', 'match1'], 'done'), (['sajs', 'skasassas', 'asdasdasdasd', 'qwerty'], 'doneagain')]

如何將元組中的第一個值減少到只包含六個字母的字符串? 理想情況下我會

final_list_of_tuples = [('match1' , 'done'), ('qwerty', 'doneagain')]

到目前為止,我有以下內容:

for a, b in dict_refine:
    a.remove(i for i in a if len(i) != 6)

我覺得好像有一些非常基本的東西,我正在吹過去。 有沒有辦法在一行中做到這一點? 輸出到字典會更容易嗎?

與涉及在Python中更改列表的大多數任務一樣,此處作業的工具可能是列表理解 ,在本例中,其中兩個:

>>> [([word for word in words if len(word) == 6], key) for (words, key) in list_of_tuples]
[(['match1'], 'done'), (['qwerty'], 'doneagain')]

內心理解[word for word in words if len(word) == 6]希望清楚 - 這會將列表過濾為長度為6的單詞。 外部只將內部一個應用於每個元組的第一個元素並重建元組。

當然,如果您直接使用這些值,則無需構建新列表,您可以正常迭代:

for (words, key) in list_of_tuples:
    six_letter_words = [word for word in words if len(word) == 6]
    ....

如果您想在這些列表上支持多個6個字母的字符串,您可以使用:

>>> l = [(['this', 'askjsdaddsa', 'match1'], 'done'), (['sajs', 'skasassas', 'asdasdasdasd', 'qwerty'], 'doneagain')]
>>> [([x for x in a if len(x) == 6], b) for a, b in l]
[(['match1'], 'done'), (['qwerty'], 'doneagain')]

您還可以在字符串列表中獲取前6個字母的字符串:

>>> l = [(['this', 'askjsdaddsa', 'match1'], 'done'), (['sajs', 'skasassas', 'asdasdasdasd', 'qwerty'], 'doneagain')]
>>> [(next(x for x in a if len(x) == 6), b) for a, b in l]
[('match1', 'done'), ('qwerty', 'doneagain')]

正如您提到的使用dict,它也是可能的:

>>> l = {'done': ['this', 'askjsdaddsa', 'match1'], 'doneagain': ['sajs', 'skasassas', 'asdasdasdasd', 'qwerty']}
>>> {k: [x for x in v if len(x) == 6] for k, v in l.items()}
{'done': ['match1'], 'doneagain': ['qwerty']}

如果您只想使用此方法的前6個字母單詞,您可以使用:

>>> l = {'done': ['this', 'askjsdaddsa', 'match1'], 'doneagain': ['sajs', 'skasassas', 'asdasdasdasd', 'qwerty']}
>>> {k: next(x for x in v if len(x) == 6) for k, v in l.items()}
{'done': 'match1', 'doneagain': 'qwerty'}

我個人更喜歡dict方法,因為它看起來更干凈。

您可以使用列表elem - 下面的elem代表列表的元素。

[([i for i in elem_list if len(i) == 6], elem_str) for (elem_list, elem_str) in list_of_tuples]

列表理解的一個更簡單的例子是:

[i for i in range(6)] ,這將創建一個從0到5的列表。可以輕松應用函數而不僅僅是i 這是一個很好的參考。 你也可以在字典中使用這種語法,對於基本的字符串操作''.join()很有用。 列表理解如何工作的解釋?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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