如何从给定的输入创建列表列表?

时间:2019-01-07 10:09:30

标签: python list numpy

我有一个输入列表

input_list = [[278, 207], [695, 205], [672, 205], [325, 205], [302, 205],[650, 167], [556, 167], [533, 167]]

我需要像这两个输出列表

output_list_1 = [[278, 205], [695, 205], [672, 205], [325, 205], [302,205]]

output_list_2 = [[650, 167], [556, 167], [533, 167]]

我想比较每个子列表的所有第二个值,如果它们之间的差大于2,则创建一个新列表。所以我有一个列表的多个列表。 所有第二个值都取平均值。

3 个答案:

答案 0 :(得分:2)

您可以创建一个列表列表,这比动态创建新列表名称要好。

类似这样的东西:

lightGallery(document.getElementById('lightgallery'));

答案 1 :(得分:0)

dic={}
input_list = [[278, 207], [695, 205], [672, 205], [325, 205], [302, 205],[650, 167], [556, 167], [533, 167]]
data =  list(set([i[1] for i in input_list]))
for i in data :
    dic[i]=[]

for  i in input_list :
    dic[i[1]].append(i[0])

new_l =[]
result =[]
for k,v in dic.items():
    for i in v:
        new_l.append([i,k])
    if len(new_l)>2:
        result.append(new_l)
    new_l=[]
print(result)


#output [[[650, 167], [556, 167], [533, 167]],[[695, 205], [672, 205], [325, 205], [302, 205]]]

答案 2 :(得分:0)

您可以使用slice_when方法:

def slice_when(predicate, iterable):
  i, x, size = 0, 0, len(iterable)
  while i < size-1:
    if predicate(iterable[i], iterable[i+1]):
      yield iterable[x:i+1]
      x = i + 1
    i += 1
  yield iterable[x:size]

可在您的input_list上以所需条件(lambda)调用:

slices = slice_when(lambda x,y: abs(x[1] - y[1]) > 2, input_list)
print(list(slices))
#=> [[[278, 207], [695, 205], [672, 205], [325, 205], [302, 205]], [[650, 167], [556, 167], [533, 167]]]