【问题标题】:How to create a list of list from the given input? [closed]如何从给定的输入创建列表列表? [关闭]
【发布时间】:2019-06-01 23:48:54
【问题描述】:

我有一个输入列表

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,我会创建一个新列表。所以我有一个列表的多个列表。 所有第二个值均取平均值。

【问题讨论】:

  • 你有没有尝试过? SO 不是家庭作业服务。

标签: python list numpy


【解决方案1】:

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

类似这样的:

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

output_list = [[input_list[0]]] # Create an output list, with the first element of input_list as a list of lists. 
x = 0
for i in range(1, len(input_list)):
    if abs(input_list[i-1][1]- input_list[i][1]) > 2: # Check if absolute difference > 2
        x += 1
        output_list.append([]) # Create new sublist
    output_list[x].append(input_list[i]) # append sublist to output_list

print(output_list)

【讨论】:

    【解决方案2】:

    您可以使用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]]]
    

    【讨论】:

      【解决方案3】:
      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]]]
      

      【讨论】:

      • 您的输出会为[278, 207] 创建一个单独的子列表。这不是所要求的(差异 > 2)。
      • @NielsHenkens 感谢您的纠正。解决方案已更新
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-27
      • 1970-01-01
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 2020-06-26
      相关资源
      最近更新 更多