Python функция, которая принимает списки и элементы и составляет один список - PullRequest
1 голос
/ 14 февраля 2020

Надеюсь, пример мог бы проиллюстрировать это лучше. Я создаю функцию, которая будет принимать список имен, различные списки имен, только имя или несколько имен (не в списке) и составлять один список из них всех (без импорта ... не родных библиотек? I Я не знаю здесь, но я имею в виду, что я хочу использовать только то, что уже доступно в python).

def make_one_list(entry1, entry2, entry3 ...):
   #regardless of what is entered (well.. it has to be list or element)
   #extract elements from list and combine with single elements and...
   return one_big_list_of_all_elements

>>>make_one_list(['John','Mark'],'Mike',['Kate','Ally'],'Shawn','Marina'...)
['John','Mark','Mike','Kate','Ally','Shawn','Marina',...]

Мой псевдокод не задуман, очевидно. Я думаю, в конце концов, некоторая проверка ввода могла бы быть в порядке, но не совсем pythoni c по своей природе для этого. Я просто делаю это как личную коммуникационную функцию для моего офиса.

СПАСИБО !!

Ответы [ 7 ]

4 голосов
/ 14 февраля 2020

Вы можете использовать *args в python. Просто просмотрите список аргументов и проверьте, является ли аргумент списком или нет (проверив его тип). Если это так, просто добавьте этот аргумент к one_big_list_of_all_elements. Довольно просто!

2 голосов
/ 14 февраля 2020

Как и ответ chain, но немного более простой с первого взгляда

def make_one_list(*args):
    one_list = []
    for arg in args:
        if isinstance(arg, str):
            one_list.append(arg)
        else:
            one_list.extend(arg)
    return one_list

ret = make_one_list(['John','Mark'],'Mike',['Kate','Ally'],'Shawn','Marina')
print(ret)
1 голос
/ 14 февраля 2020

Попробуйте это

a = []
b = []



def myFun(*argv):  

    for arg in argv:
        a.append(arg)
    myList = str(a).replace('[','').replace(']','')
    b = [myList]
    print(b)


myFun('Hello', 'Welcome', 'to', 'Geeks',['ff','tt']) 

ВЫХОД >> ["Hello", "Welcome", "to", "Geeks", "ff", 'tt' "]

надеюсь, это поможет

1 голос
/ 14 февраля 2020
final_list = []
def make_one_list(arg_list):
  for arg in arg_list:
    if isinstance(arg, list):
        for item in arg:
            final_list.append(item)
    else:
        final_list.append(arg)
  return final_list
1 голос
/ 14 февраля 2020
def flatten(x):
    if isinstance(x, list):
        tmp = []
        for i in x:
            tmp.extend(flatten(i))
        return tmp
    else:
        return [x]

Тест:

print(repr(flatten([[1, 2, 3], 4, [5], [6, [7, 8], 9]])))
print(repr(flatten(1)))
print(repr(flatten([2])))

Вывод:

[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1]
[2]

Быстрый, чистый, работает для любого типа элементов и любой глубины вложенных списков. Обратите внимание на использование «extends», которое позволяет избежать чрезмерных промежуточных результатов. Это делает функцию эффективной даже для больших списков.

1 голос
/ 14 февраля 2020

Используйте chain(iter1, iter2, ...), это нативная библиотека. Хотя вам нужно обрабатывать строки, которых нет в списках.

from itertools import chain

data = ['John','Mark'],'Mike',['Kate','Ally'],'Shawn','Marina'
r = chain(*[x if isinstance(x, list) else [x] for x in data])
print(list(r))

Вывод:

['John', 'Mark', 'Mike', 'Kate', 'Ally', 'Shawn', 'Marina']
0 голосов
/ 14 февраля 2020

Мы можем сделать то, что вы просили, соединив все списки с помощью (+)

def make_one_list(*args):
   result = []
   for i in args:
       if isinstance(i, list):
           result.append(list(i))
       else:
           result.append(i)
   return result

result = make_one_list(['John','Mark'], ['Kate','Ally'], ['Shawn','Marina'], 'Mike')
print(result)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...