比较和排序两个列表

时间:2018-08-23 15:00:54

标签: python list sorting collections duplicates

我有两个以下列表:

indexList = [5,3,2,2,7,1]
valueList = [1,2,3,4,5,6]

我想将两者排序,所以输出为:

indexList = [1,2,2,3,5,7]
valueList = [6,3,4,2,1,5]

然后,我想将缺失的索引及其对应的值填写为“ 0”:

indexList = [1,2,2,3,4,5,6,7]
valueList = [6,3,4,2,0,1,0,5]

最后,我要删除重复的索引并求和它们的值:

indexList = [1,2,3,4,5,6,7]
valueList = [6,7,2,0,1,0,5]

是否会有内置模块来执行此类任务?有人可以用我的智慧引导我吗?

3 个答案:

答案 0 :(得分:3)

您可以使用熊猫:

import pandas as pd
indexList = [5,3,2,2,7,1]
valueList = [1,2,3,4,5,6]
s = pd.Series(valueList, index= indexList)
s = s.groupby(s.index).sum().reindex(np.arange(s.index.min(), s.index.max()+1), fill_value=0)
print(s.index.tolist())
print(s.tolist())

输出:

[1, 2, 3, 4, 5, 6, 7]
[6, 7, 2, 0, 1, 0, 5]

详细信息

  • 使用valuesList作为数据和indexList作为创建pandas series 系列的索引。
  • 使用groupbysum来组合类似的索引来求和该值。
  • 接下来,reindex从系列索引的min到 系列索引的max,并使用fill_value参数进行填充 缺少0个值的索引。
  • 打印系列索引tolist
  • 打印系列值tolist

答案 1 :(得分:2)

对于第一个问题,您可以对两个列表的zip进行排序,即对元组列表进行排序:

indexList = [5,3,2,2,7,1]
valueList = [1,2,3,4,5,6]

sorted(zip(indexList, valueList))
# [(1, 6), (2, 3), (2, 4), (3, 2), (5, 1), (7, 5)]

引用this answer

  

Python按字典顺序对元组和列表进行排序;比较   第一个元素,只有在没有区别的情况下,才比较第二个元素   元素等。

如果要将值再次打包到两个列表中,则:

indexList, valueList = list(zip(*sorted(zip(indexList, valueList))))

print( indexList, valueList )
# (1, 2, 2, 3, 5, 7) (6, 3, 4, 2, 1, 5)

答案 2 :(得分:0)

(首先,我建议切换变量名称,因为它似乎valueList = [5,3,2,2,7,1]和indexList = [1,2,3,4,5,6]。)但是,而不是使用两个列表,可以从字典开始,其中的键是索引列表中的索引,值是值列表中的值。类似于:d = {5:1,3:2,2:3,2:4,7:5,1:6}按照[{https://www.saltycrane.com/blog/2007/09/how-to-sort-python-dictionary-by-keys/][1]]对字典键进行排序,以便对值列表进行排序并索引列表将与之排序。从这里也许将键(值列表)分成一个列表,将值(索引列表)分成另一个列表。您可以遍历值列表以查找丢失的值,将它们插入(并在索引列表的相应索引中插入0),然后从值列表中删除重复项,并从索引列表中删除相应的索引。希望这会有所帮助。