我有一个看起来像这样的元组列表;
ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD')]
我想在元组的第一个元素小于50时删除元组.OutputList看起来像这样;
OutputList = [(100, 'AAA'), (80, 'BBB')]
如何在python中完成?
非常感谢你的帮助。
答案 0 :(得分:38)
您可以轻松地执行以下操作:
out_tup = [i for i in in_tup if i[0] >= 50]
[Out]: [(100, 'AAA'), (80, 'BBB')]
这只是创建一个新的元组列表,只包含那些第一个元素大于或等于50的元组。结果相同,但方法不同。不是删除无效的元组,而是接受有效的元组。
答案 1 :(得分:6)
你也可以这样做:
>>> OutputList = filter(ListTuples, lambda x: x[0] >= 50)
>>> OutputList
[(100, 'AAA'), (80, 'BBB')]
答案 2 :(得分:1)
试试这个,
>>> ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD')]
>>> new=[]
>>> for i in ListTuples:
if i[0]>50:
new.append(i)
>>> new
[(100, 'AAA'), (80, 'BBB')]
>>>
答案 3 :(得分:1)
用于对sshashank124和Alex Thornton给出的解决方案进行计时的代码片段:
ListTuples = [(100, 'AAA'), (80, 'BBB'), (20, 'CCC'), (40, 'DDD')]
import timeit
timeit.timeit('[i for i in ListTuples if i[0] >= 50]', globals=globals(), number=1000000)
>>> 0.6041104920150246
timeit.timeit('filter(lambda x: x[0] >= 50, ListTuples)', globals=globals(), number=1000000)
>>> 0.3009479799948167
对于此示例,内置过滤器()解决方案更快。
答案 4 :(得分:1)
我们可以用简单的计数器和新列表来做到这一点:
new = []
for i in ListTuples:
for j in i:
if ( counter % 2 == 0 ):
if ( j > 50):
new.append(i)
counter = counter +1
输出:
[(100, 'AAA') , (80, 'BBB')]