繁体   English   中英

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

[英]How can you sort a list of lists by the number of nonzero elements in each sublist?

我有一个列表列表(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']
]

使用 Python 3,我试图让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 或矩阵或其他副列表之类的东西来完成? 感谢您的任何帮助...

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

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

使用计算 0 数量的key

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM