梳理元组的二维列表,然后用Python对它们进行排序
更新:列表中充满了我编辑列表的字符串以显示此内容
我有3个不同的列表,如
Section = [('1', '1.1', '1.2'), ('1', '2', '2.2', '3'), ('1', '1.2', '3.2', '3.5')]
Page = [('1', '1', '3'), ('1', '2', '2', '2'), ('1', '2', '3', '5')]
Titles = [('General', 'Info', 'Titles'), ('More', 'Info', 'Section', 'Here'), ('Another', 'List', 'Of', 'Strings')]
我想把它们结合起来,比如
Combined_List = [('1', '1.1', '1.2'), ('1', '2', '2.2', '3'), ('1', '1.2', '3.2', '3.5'),
('1', '1', '3'), ('1', '2', '2', '2'), ('1', '2', '3', '5'),
('General', 'Info', 'Titles'), ('More', 'Info', 'Section', 'Here'), ('Another', 'List', 'Of', 'Strings')]
或者任何其他形式,允许我然后按列表中的数字对它们进行排序。
在这种情况下,它会
Sorted_list = [('1', '1', '1', '1.1', '1.2', '1.2', '2', '2.2', '3', '3.2', '3.5'),
('1', '1', '1', '1', '3', '2', '2', '2', '2', '3', '5'),
('General', 'More', 'Another', 'Info', 'Titles', 'List', 'Info', 'Section', 'Here', 'Of', 'Strings')
我需要这样,所以我可以最终导出一个分区列表为excel。 如果你能想到更好的显示/格式的方式,请分享!
尝试这个,
Section = [('1', '1.1', '1.2'), ('1', '2', '2.2', '3'), ('1', '1.2', '3.2', '3.5')]
Page = [('1', '1', '3'), ('1', '2', '2', '2'), ('1', '2', '3', '5')]
Titles = [('General', 'Info', 'Titles'), ('More', 'Info', 'Section', 'Here'), ('Another', 'List', 'Of', 'Strings')]
# Flat a list of tuples into a list
l1 = [item for sublist in Section for item in sublist]
l2 = [item for sublist in Page for item in sublist]
l3 = [item for sublist in Titles for item in sublist]
# Python2, `zip` returns a list of tuples
#result = zip(*sorted(zip(l1, l2, l3), key=lambda x:float(x[0])))
# Python3, `zip` returns an iterator of tuples
result = list(zip(*sorted(zip(l1, l2, l3), key=lambda x:float(x[0]))))
print(result)
# Output
[ ('1', '1', '1', '1.1', '1.2', '1.2', '2', '2.2', '3', '3.2', '3.5'),
('1', '1', '1', '1', '3', '2', '2', '2', '2', '3', '5'),
('General', 'More', 'Another', 'Info', 'Titles', 'List', 'Info', 'Section', 'Here', 'Of', 'Strings')]
你可以做:
from itertools import chain
tuples = zip(map(float, list(chain(*Section))),
list(chain(*Page)),
list(chain(*Title)))
zip(*sorted(tuples, key=lambda x: x[0]))
Out[232]:
[(1.0, 1.0, 1.0, 1.1, 1.2, 1.2, 2.0, 2.2, 3.0, 3.2, 3.5),
('1', '1', '1', '1', '3', '2', '2', '2', '2', '3', '5'),
('General',
'More',
'Another',
'Info',
'Titles',
'List',
'Info',
'Section',
'Here',
'Of',
'Strings')]
在这里,你首先打开你的三个列表(哪个list(chain(*L))
)并将它们打包成带有zip
元组。 提示“元组”来查看它的外观。
然后在第二行代码中,您可以根据所需元组的元素应用排序。 然后你解开结果。
我的方法。 列表理解,无需导入模块。 我认为它很快,而且非常简单。
编辑:我已经添加了一个未排序的方法和排序的方法。
#Unsorted
newList =[
[item for sublist in Section for item in sublist],
[item for sublist in Page for item in sublist],
[item for sublist in Titles for item in sublist]
]
print newList
#Output
#[[1, 1.1, 1.2, 1, 2, 2.2, 3, 1, 1.2, 3.2, 3.5],
# [1, 1, 3, 1, 2, 2, 2, 1, 2, 3, 5],
# ['General', 'Info', 'Titles', 'More', 'Info', 'Section', 'Here', 'Another', 'List', 'Of', 'Strings']]
#Sort first two lists afterwards, if desired
for i in range(2):
newList[i].sort()
print newList
#Output
#[[1, 1, 1, 1.1, 1.2, 1.2, 2, 2.2, 3, 3.2, 3.5],
# [1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 5],
# ['General', 'Info', 'Titles', 'More', 'Info', 'Section', 'Here', 'Another', 'List', 'Of', 'Strings']]
链接地址: http://www.djcxy.com/p/34531.html
上一篇: Combing 2D list of tuples and then sorting them in Python