簡體   English   中英

遍歷python中的元組列表並選擇某些元素

[英]iterating through list of tuples in python and choosing certain elements

我有一個清單

f_list = ["[('TTATGCTAAGTATC', 8)]", "[('TTATGCTAAGTATC', 8)]", "[('AGCTCCCCGTTTTC', 1)]", "[('AGCTCCCCGTTTTC', 35), ('TTCATTCCTCTCTC', 1)]", "[('TTATGCTAAGTATC', 4), ('TTACGCTACTCACC', 1)]"]

我想用元組的第二個元素大於10的元素制作一個新列表。

我試過了

for e in f_list:
    [item for item in f_list if e[1] >= 10]

但這是行不通的。 預期的輸出是類似的列表

f_new = ["nil","nil","[('AGCTCCCCGTTTTC', 35)]"]

我不確定這是否是最好的解決方法,但是它有效:

f_list = [
    "[('TTATGCTAAGTATC', 8)]",
    "[('TTATGCTAAGTATC', 8)]",
    "[('AGCTCCCCGTTTTC', 1)]",
    "[('AGCTCCCCGTTTTC', 35)]",
    "[('TTCATTCCTCTCTC', 1)]",
    "[('TTATGCTAAGTATC', 4)]",
    "[('TTACGCTACTCACC', 1)]"
]

f_new = []

for i in f_list:

    if int(i.split(',')[1].split(')')[0]) >= 10:
        # Adds all items that satisfy your requirements
        f_new.append(i)
    else:
        # Adds 'nil' for the items that
        # do not satisfy your requirements
        f_new.append("nil")

print f_new

輸出

['nil', 'nil', 'nil', "[('AGCTCCCCGTTTTC', 35)]", 'nil', 'nil', 'nil']

正如Padraic提到的,您的列表有些奇怪。 您可以在不需要的地方使用引號,並將每個元組放在僅包含一個元素的單獨列表中。 如果您可以清理原始列表,則應該可以按預期的方式工作:

f_list = [('TTATGCTAAGTATC', 8), ('TTATGCTAAGTATC', 8), ('AGCTCCCCGTTTTC', 1), ('AGCTCCCCGTTTTC', 35), ('TTCATTCCTCTCTC', 1), ('TTATGCTAAGTATC', 4), ('TTACGCTACTCACC', 1)]

f_new = []

for tupl in f_list:
    if tupl[1] > 10:
        f_new.append(tupl)
    else:
        f_new.append("nil")

print(f_new)

輸出:

['nil', 'nil', 'nil', ('AGCTCCCCGTTTTC', 35), 'nil', 'nil', 'nil']

如果您不能更改原始列表,而只需要滿足您要求的元素,Jape的答案將為您完成。

暫無
暫無

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

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