如何从列表列表中提取某些元素?

时间:2017-03-08 05:37:49

标签: python list

我有一份清单清单:

lists=[[1.2,0], [4.5,0], [2.1,1], [6.5,0], [3.4,1]]

我想将所有具有0的元素放在一个列表中,将所有1放在另一个列表中,所以它看起来像这样:

res1=[2.1, 3.4]
res0=[1.2, 4.5, 6.5]

我尝试过以下操作,但似乎无效:

for a in lists:
  for b in lists:
    if b ==0:
    res1.append(lists[1])
    else:
     res2.append(lists[2])

我是python的新手,我尝试过在线搜索,但我无法找到结果。任何帮助,将不胜感激。谢谢!

3 个答案:

答案 0 :(得分:0)

您不需要嵌套循环。使用ab作为解包变量:

for a,b in lists:
    if b==0:
        res1.append(a)
    else:
        res2.append(a)

或者您可以创建一个新的列表列表,其中0或1用作索引:

result = [[], []]
for a,b in lists:
    result[b].append(a)

答案 1 :(得分:-1)

算法应如下所示:

  

列表中的每个项目

     

检查项目的第二个元素是0还是1

     

如果为0,则在res0

中附加项目的第一个元素      

如果为1,则在res1

中附加项目的第一个元素

让我们最简单地在python中翻译算法:

lists=[[1.2,0], [4.5,0], [2.1,1], [6.5,0], [3.4,1]]
res0=[]
res1=[]

for i in lists:
     # You have inner lists in i i.e. [1.2,0], [4.5,0] , ... etc  
     if i[1] == 0 :
         res0.append(i[0]) 
     elif i[1] == 1:
         res1.append(i[0])

或者,您可以使用简单的列表理解来完成。

>>> a = [[1.2,0], [4.5,0], [2.1,1], [6.5,0], [3.4,1]]
>>> [i[0] for i in a if not i[1]]
[1.2, 4.5, 6.5]
>>> [i[0] for i in a if i[1]]
[2.1, 3.4]
>>> 
顺便说一句,这个解决方案假设您的内部列表中只有两个项目。

答案 2 :(得分:-1)

不要用你自己的算法重新发明轮子:

my_list = [[1.2,0], [4.5,0], [2.1,1], [6.5,0], [3.4,1]]

with_zero = list(filter(lambda x: 0 in x, my_list))
with_one = list(filter(lambda x: 1 in x, my_list))

print with_zero
print with_one

结果:

[[1.2, 0], [4.5, 0], [6.5, 0]]
[[2.1, 1], [3.4, 1]]