[英]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.