如何根据每个子列表中非零元素的数量对列表列表进行排序?

2024-10-03 17:16:10 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个列表(8个列表,每个列表包含15个元素),如下所示:

mylist = [
    ['Adam', '0', '1', '0', '1', '0', '1', '0', '0', '1', '0', '1', '0', '1', '0'], 
    ['Bobby', '0', '0', '0', '0', '1', '1', '0', '0', '0', '0', '0', '1', '1', '0'], 
    ['Felicia', '0', '0', '1', '0', '1', '0', '0', '0', '0', '1', '0', '1', '0', '0'], 
    ['Jake', '0', '1', '1', '1', '1', '1', '0', '0', '0', '0', '0', '0', '0', '0'], 
    ['MikeP', '0', '0', '1', '0', '1', '0', '0', '0', '1', '1', '0', '1', '0', '0'],
    ['MikeF', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0', '0'], 
    ['Shannon', '0', '1', '0', '0', '1', '0', '0', '0', '0', '1', '0', '1', '0', '0'],
    ['Tom', '0', '1', '1', '1', '1', '0', '0', '0', '1', '1', '1', '1', '0', '0']
]

使用Python3,我试图对mylist进行排序,从子列表中最多的零开始,到子列表中最少的零。我不想在每个列表中排序-0和1需要保留在它们最终所在的位置

我尝试过使用len()和lambda函数,以及我在这里发现的其他想法,比如用以下方法将其分解:

for index1, value1 in enumerate(mylist):
    mylistsorted.append([value2 for index2, value2 in enumerate(mylist[index1]) if value2 != '0'])

mylistsorted.sort(key = len)

但我在新的排序列表中丢失了所有的“0”。这也许应该用其他东西来完成,比如numpy或matrix,或者其他一些列表的副列表?谢谢你的帮助


Tags: in元素列表forlen排序adamvalue2
3条回答

做一个不那么疯狂的猜测,然后数一数:

mylist.sort(key=lambda l: l.count('1'))

使用list.count作为排序键,以统计每个列表中的所有0:

sorted(mylist, key=lambda x: -x[1:].count('0'))

使用一个key来计算0的数量:

mylist.sort( key = lambda l : -l.count('0') )

相关问题 更多 >