![](/img/trans.png)
[英]Iterating through and deleting certain elements in a list of dictionaries in 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.