迭代python中的元组列表并选择某些元素

时间:2016-07-18 17:40:50

标签: python

我有一个清单

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)]"]

2 个答案:

答案 0 :(得分:2)

我不确定这是否是最好的解决方法,但它有效:

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']

答案 1 :(得分:0)

正如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的答案将为您完成。