Как добавить имена из двух отдельных списков, чтобы добавить и объединить в один список - PullRequest
3 голосов
/ 02 марта 2020

Я пытаюсь добавить имена в пустой список с пустой строкой и пустым списком. Я хочу выполнить итерацию, используя для l oop или al oop, который сможет через список friendsNum и в круглых скобках вставить случайное имя из списка имен людей, которое я [0], затем после двух случайных имен из список под названием friendnames в пустом списке, который будет i [1] после строки, и будет продолжаться до последнего списка.

    import random 
    friendsNum = [("",[]),("",[]),("",[]),("",[])]
    peopleNames = ["Alvin","Danny","Maria","Lauren"]
    friendNames = ("john","matt","will","mario","wilma","shannon","mary","jordan") 

    newList = friendsNum
    tempName = ()
    temp = ()
    for i in friendsNum:
        tempName = random.sample(peopleNames,1)
        temp = random.sample(friendNames,2)
        newList = i[0].append(tempName)
        newList = i[1].append(temp)

После этого для итерации l oop это будет выглядеть следующим образом.


    friendsNum = [("Johnny",["john","matt"]),
                  ("Zach",["wilma","shannon"]),
                  ("Dawn",["mary","jordan"]),
                  ("Max",["will","john"])]

Я получаю сообщение об ошибке из-за невозможности добавить строковый объект из строк

 newList = i[0].append(tempName)
 newList = i[1].append(temp)

Правильно ли я подхожу к этому неправильно, что касается l oop, который я должен использовать?

Сообщение об ошибке ниже

    newList = i[0].append(tempName)
AttributeError: 'str' object has no attribute 'append'

Ответы [ 3 ]

2 голосов
/ 02 марта 2020

Количество проблем:

  • i[0].append(tempName): i[0] является str и, следовательно, не будет иметь append. Кроме того, вы не можете напрямую изменить его, поскольку он уже находится в кортеже и является неизменным.
  • i[1].append(temp): поскольку temp является списком, i[1].append(temp) сделает его вложенным списком. Вам нужно extend
  • Поскольку append и extend являются операциями на месте, newList фактически ничего не делает.

Вместо этого попробуйте однострочно с пониманием списка:

[(random.choice(peopleNames), random.sample(friendNames,2)) for i in range(len(peopleNames))]

Вывод:

[('Danny', ['shannon', 'john']),
 ('Maria', ['mary', 'shannon']),
 ('Lauren', ['matt', 'wilma']),
 ('Alvin', ['will', 'mario'])]
1 голос
/ 02 марта 2020

Ваш первый элемент - это пустая строка в friendsnum, поэтому вы не можете использовать операцию добавления строки. Кроме того, вы не можете присвоить значения в кортеже как его неизменяемом.

    import random 
    friendsNum = [("",[]),("",[]),("",[]),("",[])]
    peopleNames = ["Alvin","Danny","Maria","Lauren"]
    friendNames = ("john","matt","will","mario","wilma","shannon","mary","jordan") 

    newList = []
    tempName = ()
    temp = ()
    for i in friendsNum:
        tempName = random.sample(peopleNames,1)
        temp = random.sample(friendNames,2)
        i = list(i)
        i[0] = (tempName[0])
        i[1] = (temp)
        newList.append(tuple(i))

используйте выше обновленный код, вот пример вывода

[('Danny', ['shannon', 'will']),
 ('Alvin', ['jordan', 'john']),
 ('Maria', ['mary', 'will']),
 ('Alvin', ['wilma', 'mary'])]
0 голосов
/ 02 марта 2020

строки являются неизменными, вы не можете добавить к ним. Пожалуйста, найдите это больше для этого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...