【问题标题】:Sort sublists from a list and then saving them as sublists从列表中对子列表进行排序,然后将它们保存为子列表
【发布时间】:2021-06-28 22:11:25
【问题描述】:
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]]

我们将不胜感激。

【问题讨论】:

  • 你好,将列表分成相等的部分会有帮助吗? numpy.org/doc/stable/reference/generated/numpy.split.html
  • 没有。因为,我不知道大小。我会将代码用于一个大列表,其中我不确定第一列中值的范围。虽然我使用的是 range(8) 但我会改变它

标签: python-3.x list append sublist


【解决方案1】:

您需要一个临时 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)

【讨论】:

  • 太棒了。谢谢
猜你喜欢
  • 2012-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 2012-06-01
  • 1970-01-01
相关资源
最近更新 更多