从列表中排序子列表,然后将它们保存为子列表

Sort sublists from a list and then saving them as sublists

b = np.array([[1, -20.559, -5.4188, -4.0916],[1, -22, -5.9432,-4.0916],[1, -20.559, -5.4188, 
-4.0916],[1, -20.559, -5.4188, -4.0916],[2, -20.559, -5.4188, -4.0916],[1, -20.559, -5.4188, 
-4.0916],[3, -20.559, -5.4188, -4.0916],  [2, -20.559, -5.4188, -4.0916],[1, -20.559, 
-5.4188, -4.0916],[5, -20.559, -5.4188, -4.0916],[1, -20.559, -5.4188, -4.0916],[3, -20.559, 
-5.4188, -4.0916],[7, -20.559, -5.4188, -4.0916],[1, -20.559, -5.4188, -4.0916],[7, -20.559, 
-5.4188, -4.0916], [5, -20.559, -5.4188, -4.0916],[2, -20.559, -5.4188, -4.0916],])

list1 = b.tolist()
len(list1)
myList = []
mynew = []

for j in range(8):
    for i in range(len(list1)):
            if list1[i][0]==j:                
                myList.append(list1[i][0:4])  
            mynew.append(myList)
print(myList)

我的输出应该是这样的:

[[[1.0, -20.559, -5.4188, -4.0916], [1.0, -22.0, -5.9432, -4.0916], [1.0, -20.559, -5.4188, -4.0916], [1.0, -20.559, -5.4188, -4.0916], [1.0, -20.559, -5.4188, -4.0916], [1.0, -20.559, -5.4188, -4.0916], [1.0, -20.559, -5.4188, -4.0916], [1.0, -20.559, -5.4188, -4.0916]], [[2.0, -20.559, -5.4188, -4.0916], [2.0, -20.559, -5.4188, -4.0916], [2.0, -20.559, -5.4188, -4.0916]], [[3.0, -20.559, -5.4188, -4.0916], [3.0, -20.559, -5.4188, -4.0916]], [[5.0, -20.559, -5.4188, -4.0916], [5.0, -20.559, -5.4188, -4.0916]], [[7.0, -20.559, -5.4188, -4.0916], [7.0, -20.559, -5.4188, -4.0916]]]

我得到的是:

[[1.0, -20.559, -5.4188, -4.0916], [1.0, -22.0, -5.9432, -4.0916], [1.0, -20.559, -5.4188, -4.0916], [1.0, -20.559, -5.4188, -4.0916], [1.0, -20.559, -5.4188, -4.0916], [1.0, -20.559, -5.4188, -4.0916], [1.0, -20.559, -5.4188, -4.0916], [1.0, -20.559, -5.4188, -4.0916], [2.0, -20.559, -5.4188, -4.0916], [2.0, -20.559, -5.4188, -4.0916], [2.0, -20.559, -5.4188, -4.0916], [3.0, -20.559, -5.4188, -4.0916], [3.0, -20.559, -5.4188, -4.0916], [5.0, -20.559, -5.4188, -4.0916], [5.0, -20.559, -5.4188, -4.0916], [7.0, -20.559, -5.4188, -4.0916], [7.0, -20.559, -5.4188, -4.0916]]

如有任何帮助,我们将不胜感激。

您需要一个临时文件 jList 来存储第一个元素相同的所有列表。

for j in range(8):
    jList = []
    for i in range(len(list1)):
        if list1[i][0] == j:
            jList.append(list1[i][:])

    if len(jList):
        myList.append(jList)


from pprint import pprint
pprint(myList)

"""
[[[1.0, -20.559, -5.4188, -4.0916],
  [1.0, -22.0, -5.9432, -4.0916],
  [1.0, -20.559, -5.4188, -4.0916],
  [1.0, -20.559, -5.4188, -4.0916],
  [1.0, -20.559, -5.4188, -4.0916],
  [1.0, -20.559, -5.4188, -4.0916],
  [1.0, -20.559, -5.4188, -4.0916],
  [1.0, -20.559, -5.4188, -4.0916]],
 [[2.0, -20.559, -5.4188, -4.0916],
  [2.0, -20.559, -5.4188, -4.0916],
  [2.0, -20.559, -5.4188, -4.0916]],
 [[3.0, -20.559, -5.4188, -4.0916], [3.0, -20.559, -5.4188, -4.0916]],
 [[5.0, -20.559, -5.4188, -4.0916], [5.0, -20.559, -5.4188, -4.0916]],
 [[7.0, -20.559, -5.4188, -4.0916], [7.0, -20.559, -5.4188, -4.0916]]]
"""

但您也可以使用 pandas

df = pd.DataFrame(b)

result = []

for (method, group) in df.groupby(0):
    result.append(group.values.tolist())

pprint(result)

尽管将所有相同的第一个元素分组到一个列表中,您也可以使用 pandas.DataFrame.sort_values() 通过在 groupby

df.sort_values([0, 1, 2, 3], axis=1, ascending=[True, True, True, True], inplace=True)