Как мне добавить список с подсписками внутри него? - PullRequest
0 голосов
/ 13 сентября 2018

Все, что мне нужно сделать, это создать 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}].Когда я добавляю 3-й для него, он сказал бы, что объект 'int' не повторяется.Нужно ли как-то проверить, является ли элемент int или string, а затем пропустить их?Или я что-то упустил?

PS Я считаю, что это делается с помощью рекурсивных функций, но я понятия не имею о них: (

Ответы [ 5 ]

0 голосов
/ 13 сентября 2018

Использование функции рекурсивного генератора:

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}]
0 голосов
/ 13 сентября 2018

Может быть, вы ищете что-то вроде этого:

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]
0 голосов
/ 13 сентября 2018

Вот один пример рекурсивной функции, которая сглаживает ваш список:

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}]

0 голосов
/ 13 сентября 2018

Использование рекурсивной функции. Наслаждайтесь!

Код:

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]
0 голосов
/ 13 сентября 2018

Список методов

Объект list предлагает два различных метода добавления новых элементов в данный list:

  1. list.append (x): Добавить элемент в конец списка. Эквивалентен [len (a):] = [x].

  2. list.extend (повторяемый): Расширить список, добавив все элементы из повторяемого. Эквивалентен [len (a):] = повторяемый.

* * Пример 1 022
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}]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...