我想创建一个多列表列表的循环,我有这样的东西:
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] ] ]
答案 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]