为多个列表的列表创建循环

时间:2016-04-06 23:16:29

标签: python loops

我想创建一个多列表列表的循环,我有这样的东西:

my_list = [ [ [1,2], [2,3] ], [ [2,3], [2,3] ], [ [1,2], [1,3] ] ]

所以,我想只保留第一个值,如果第二个值大于第一个值,我不想要输出中的第二个值,这是我的脚本:

new_list = []
for member in range(0, len(my_list)):
    for m,n in my_list[member]:
        if m.distance < n.distance
            new_list.append([m])

当我运行它时,它会删除列表的一个级别并返回:

new_list = [[1], [2], [2], [2], [1], [1]]

缺少什么? 这是我对输出的期望:

new_list = [ [ [1],[2] ], [ [2],[2] ], [ [1],[1] ] ]

3 个答案:

答案 0 :(得分:0)

您可以在此处使用map()功能原语来轻松表达结果。

我假设所有内部列表至少有2个元素,如果第二个元素不大于第一个元素,则返回整个列表而不是仅返回其第一个元素。

>>> my_list = [ [ [1,2], [2,3] ], [ [2,3], [2,3] ], [ [1,2], [1,3] ] ]
>>> map(lambda x: map(lambda y: y[:1] if y[1] > y[0] else y, x), my_list)
[[[1], [2]], [[2], [2]], [[1], [1]]]
>>> 

答案 1 :(得分:0)

这应该有效。您需要添加一个子列表,如下所示:

new_list =[]
for l in my_list:
  sub_list=[]
  for m, n in l:
      if m<n:
          sub_list.append(m)
new_list.append(sub_list)

>>>[[1, 2], [2, 2], [1, 1]]

答案 2 :(得分:0)

如果你想保留第二个值,那么你应该保留第二个值,你没有在你的问题中指明这个案例:

[[[min(x)] for x in y] for y in my_list]