【问题标题】:Trying to sort three list of data so the sort order of each list is the same尝试对三个数据列表进行排序,以便每个列表的排序顺序相同
【发布时间】:2016-06-14 13:50:23
【问题描述】:

我有一个程序,其中包含三个列表关闭数据,称为 proffit、macdHi 和 macdLow。 macdHi 和 macdLo 是用于创建价格值的函数中的参数,所以

price[x]=f(macdHi]x],macdLow[x])

这个列表非常大,我想对列表进行排序,所以在我对价格进行排序后,macdHi 和 macdLow 列表按顺序排序。 我可以使用pythons排序方法对价目表进行排序,但是macdLo和macdHi列表的顺序不再匹配价目表所以 price[x]=f(macdHi]x],macdLow[x]) 不再为真

【问题讨论】:

  • 将它们压缩成一个元组,按价格对元组进行排序,然后解压缩...
  • 也许如果这三个值是关联的,它们应该一直在一个对象中。该对象的列表可以按您想要的任何方式进行排序。

标签: python


【解决方案1】:

你可以试试这个

AllLists = [macdHi,macdLow]

#sort by MacdHi
SortedByMacdHi = sorted(AllLists, key=lambda row: row[0])
for i in range(len(SortedByMacdHi)):
    price[i]=f(AllLists[0][i],AllLists[1][i])

#sort by MacdLow
SortedByMacdLow = sorted(AllLists, key=lambda row: row[1])
for i in range(len(SortedByMacdLow)):
    price[i]=f(AllLists[0][i],AllLists[1][i])

#sort by price
for i in range(len(macdHi)):
    price[i]=f(macdHi[i],macdLow[i])
CombinedList = [price,macdHi,macdLow]
SortedByMacdLow = sorted(CombinedList, key=lambda row: row[0])

虽然我没有数据可以测试。基本上,前两种方法我结合了 macdHi 和 macdLow,这样我就可以对它们进行排序,同时保持它们的行对应。然后我会使用该排序列表来创建价格。

第三种方法我做了和前两种几乎一样的事情,但是把操作反过来了。我创建了价格,然后合并了三个列表,以便在排序过程中保持它们的行对应。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可能会发现Pandas 提供了一个更简单/更快/更清洁的解决方案。它内置了根据各种标准对数据进行排序的方法,并针对大型数据集进行了优化。

    这里有一个很好的教程:http://chrisalbon.com/python/pandas_sorting_rows_dataframe.html

    【讨论】:

      猜你喜欢
      • 2023-01-19
      • 1970-01-01
      • 2011-02-03
      • 2019-08-18
      • 2012-10-20
      • 2012-08-27
      • 1970-01-01
      • 1970-01-01
      • 2019-09-15
      相关资源
      最近更新 更多