繁体   English   中英

如何在列表中附加子列表?

[英]How do I append a list with sublists inside of it?

我需要做的就是用所有这些值创建1个列表,而不包含子列表。

example = ['a', ['c', 1, 3], ['f', 7, [4, '4']], [{'lalala': 111}]]
newArray = []

def func(array):
    for i in array:
        for z in i:
            newArray.append(z)

print(func(example))

这里的结果将是:['a','c',1、3,'f',7,[4,'4'],{'lalala':111}]。 当我添加3rd时,它会说“ int”对象不可迭代。 我是否需要以某种方式检查项目是int还是string,然后跳过它们? 还是我错过了什么?

PS我相信这是通过递归函数完成的,但是我对它们不了解:(

这是递归函数使列表变平的一个示例:

def flatten(l):
    if type(l) is list:
        if not l:
            return []
        if len(l) == 1 :
            return flatten(l[0])
        else:
            return flatten(l[0]) + flatten(l[1:])
    else:
        return [l]

结果为['a','c',1、3,'f',7、4,'4',{'lalala':111}]

使用递归函数。 请享用!

码:

example = ['a', ['c', 1, 3], ['f', 7, [4, '4']], [{'lalala': 111}]]
newArray = [] 

def super_extend(v):
        if type(v) is list:
            [super_extend(x) for x in v if x is not None]
        if type(v) is dict:
            {k:super_extend(v) for k,v in v.items() if v is not None}
        if type(v) is str or isinstance(v, int) or isinstance(v, float) :
            newArray.append(v)

super_extend(example)
print(newArray)

输出:

['a', 'c', 1, 3, 'f', 7, 4, '4', 111]
[Finished in 0.078s]

如果您不希望字典保留为字典,而只希望值。 您可以使用它。 但是,如果您想保留密钥,则只需使用:

if type(v) is dict:
        {super_extend(v):super_extend(k) for k,v in v.items() if v is not None}

那么输出将是:

['a', 'c', 1, 3, 'f', 7, 4, '4', 'lalala', 111]
[Finished in 0.077s]

使用递归生成器函数:

def flatten(l):
    if isinstance(l, list):
        for x in l:
            yield from flatten(x)
    else:
        yield l

>>> list(flatten(example))
['a', 'c', 1, 3, 'f', 7, 4, '4', {'lalala': 111}]

清单方法

list对象提供了两种将新项目添加到给定list

  1. list.append(x):在列表末尾添加一个项目。 等效于a [len(a):] = [x]。

  2. list.extend(iterable):通过附加来自iterable的所有项来扩展列表。 等效于a [len(a):] =可迭代的。

old_list = ['a', ['c', 1, 3], ['f', 7, [4, '4']], [{'lalala': 111}]]
new_list = []

for element in old_list:
    new_list.extend(element)

print(new_list)

结果

['a', 'c', 1, 3, 'f', 7, [4, '4'], {'lalala': 111}]

也许您正在寻找这样的东西:

example = ['a', ['c', 1, 3], ['f', 7, [4, '4']], [{'lalala': 111}]]

def func(array):
    newArray = []
    for i in array:
        if((type(i)==int) or (type(i)==str)):
            newArray.append(i)
        elif(type(i)==dict ):
            keys = i.keys()
            values = i.values()
            newArray.append(keys[0])
            newArray.append(values[0])
        else:
            for z in i:            
                newArray.append(z)
    return newArray

print(func(example))
print(func(func(example)))
print(func(func(func(example))))

结果:

['a', 'c', 1, 3, 'f', 7, [4, '4'], {'lalala': 111}]
['a', 'c', 1, 3, 'f', 7, 4, '4', 'lalala', 111]
['a', 'c', 1, 3, 'f', 7, 4, '4', 'lalala', 111]

暂无
暂无

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

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