正确格式的列表元素的长度

时间:2019-07-12 14:59:43

标签: python list

假设我有以下列表:

l=[[["a", "b", "c", "k"], ["a", "b", "c", "s", "u"], ["a", "b", "f", "t"], ["a", "b", "e", "l", "n", "o"]],[["a", "b", "d", "n", "o"], ["a","b", "d", "e", "n", "o"]]]

我想遍历每个元素并找到要执行此操作的长度,请执行以下操作:

s=[]
for i in l:
    for j in i:
        s.append(len(j))

可以正确地给我长度,如下所示:

[4, 5, 4, 6, 5, 6]

但是l本身的长度为2,所以我希望输出如下所示:

[[4, 5, 4, 6],[5, 6]]

我想知道为什么会发生这种扁平化?

3 个答案:

答案 0 :(得分:3)

您可以使用嵌套列表理解来保留嵌套结构:

[[len(j) for j in i] for i in l]
#[[4, 5, 4, 6], [5, 6]]

如果您喜欢for循环,则可以在考虑l的长度的情况下预先初始化嵌套列表,并使用enumerateappend到每个子列表:

s = [[] for i in range(len(l))]
for ix, i in enumerate(l):
    for j in i:
        s[ix].append(len(j))

答案 1 :(得分:0)

您可以执行以下操作:

#!/usr/bin/python3
l=[[["a", "b", "c", "k"], ["a", "b", "c", "s", "u"], ["a", "b", "f", "t"], ["a", "b", "e", "l", "n", "o"]],[["a", "b", "d", "n", "o"], ["a","b", "d", "e", "n", "o"]]]
s=[]
for i in l:
    subList=[]
    for j in i:
        subList.append(len(j))
    s.append(subList)
print(s)

答案 2 :(得分:0)

这可能是矫kill过正,但是您可以定义一个递归函数,以将给定函数应用于给定列表列表中的最低级子列表,即应用于不完全由其他列表组成的所有子列表。除len之外,这还可以用于更多级别的嵌套,不规则嵌套的列表以及其他功能。

def deep_map(f, lst):
    if all(type(x) == list for x in lst):
        # call recursively for nested sublists
        return [deep_map(f, x) for x in lst]
    else:
        # apply to this sublist
        return f(lst)

根据您的情况,以deep_map(len, l)的身份致电以获得[[4, 5, 4, 6], [5, 6]]