我有一个清单
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)]"]
答案 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的答案将为您完成。