我有一个列表列表,看起来像这样:
List=[[1,3],[3,4,7,9],[4,7],[2,4,5,3],[5,7,4]]
我想根据列表元素的长度对其进行分类,因此结果如下所示:
2ElelmentSublist=[[1,3],[4,7]]
4ElementSublist=[[3,4,7,9],[2,4,5,3]]
....
以此类推。
我读了一篇有关itertools.groupby()
的帖子,
但是我不知道如何在我的情况下应用它。
有什么pythonic的方法吗?
注意:不需要将结果放在单独的变量中,我需要一种方法来知道我有多少种长度,并且需要一种方法来分别到达每个组。
谢谢。
答案 0 :(得分:2)
您无法使用动态名称(在您的2ElementSublist
左右)来创建具有动态名称的列表。
但是您可以设计一个字典,其中键作为长度,值作为列表列表。
尝试一下:
result = {}
for L in List:
result.setdefault(len(L), list()).append(L)
print(result)
您将看到
{2: [[1, 3], [4, 7]], 4: [[3, 4, 7, 9], [2, 4, 5, 3]], 3: [[5, 7, 4]]}
.setdefault(k, d)
允许您访问键k
的字典值,或者使用默认值d
进行初始化。然后附加每个列表。
答案 1 :(得分:1)
通过groupby
使用len
:
例如:
from itertools import groupby
lst = [[1,3],[3,4,7,9],[4,7],[2,4,5,3],[5,7,4]]
print( [list(v) for k, v in groupby(sorted(lst, key=len), key=len)] )
#or
print( {k: list(v) for k, v in groupby(sorted(lst, key=len), key=len)} )
输出:
[[[1, 3], [4, 7]], [[5, 7, 4]], [[3, 4, 7, 9], [2, 4, 5, 3]]]
{2: [[1, 3], [4, 7]], 3: [[5, 7, 4]], 4: [[3, 4, 7, 9], [2, 4, 5, 3]]}
答案 2 :(得分:1)
可能不是最Python的,但您可以调用与所需方式类似的值。
POST
答案 3 :(得分:1)
由于您已经提到过,您需要按len
分组的列表,并且需要将它们包含在单独的变量中,我认为您将需要dict
作为最终输出。
from itertools import groupby, chain
from collections import defaultdict
List=[[1,3],[3,4,7,9],[4,7],[2,4,5,3],[5,7,4]]
res = defaultdict(list)
for _, v in groupby(sorted(List, key=len)):
l = list(chain(*v))
res[len(l)].append(l)
# Output : defaultdict(list,
{2: [[1, 3], [4, 7]],
3: [[5, 7, 4]],
4: [[3, 4, 7, 9], [2, 4, 5, 3]]})
答案 4 :(得分:1)
您可以尝试以下方法:
byte [] null_arr = new byte[16];
// K: 2b7e1516 28aed2a6 abf71588 09cf4f3c
byte[] key = { 0x2b,0x7e,0x15,0x16,
0x28,0xae,0xd2,0xa6,
0xab,0xf7,0x15,0x88,
0x09,0xcf,0x4f,0x3c };
// M: 6bc1bee2 2e409f96 e93d7e11 7393172a Mlen: 128
byte[] message= { 0x6b,0xc1,0xbe,0xe2,
0x2e,0x40,0x9f,0x96,
0xe9,0x3d,0x7e,0x11,
0x73,0x93,0x17,0x2a };
byte [] cmac = new byte [16];
c = calc_AES_CMAC(message, key, cmac);
string ans = ByteArrayToString(cmac);
MessageBox.Show(ans);
List = [[1,3],[3,4,7,9],[4,7],[2,4,5,3],[5,7,4]]
sizes = set([(len(element)) for element in List])
result = {}
for element in List:
if len(element) not in result.keys():
result[len(element)] = []
result[len(element)].append(element)
print(result)
是:
result