Как создать новый список, добавив существующие списки, используя цикл for - PullRequest
1 голос
/ 30 сентября 2019

Я хотел бы объединить слово из одного вложенного списка вместе со словом "и" между ними. Например:

l1 = [Патрик, Питер, Джером], [Лиза, Карен, Алиса]

l2 должны быть: [Патрик и Лиза, Питер и Карен, Джером и Алиса]

Код не должен иметь значения, есть ли 2,3 или любое количество списков во вложенном списке.

Я попытался перебрать диапазон списков в переменной, а затем добавитьпривести к новой переменной. Однако, результат - только первая комбинация или результаты заканчиваются после второй комбинации.

def names(one):
    newlist = []
    x = 0
    for y in range(len(one)):
        newlist.append(one[x][y] + " and " + one[x+1][y])
        x += 1
        return newlist

['Патрик и Лиза']

- это то, что я получил до сих пор. Я знаю, что это как-то связано с итерацией, но, поскольку я довольно плохо знаком с Python, я застрял.

Ответы [ 2 ]

2 голосов
/ 30 сентября 2019

Кажется, что l1 - это кортеж из двух элементов. Используйте следующее:

l2 = []

for name_a, name_b in zip(l1[0], l1[1]):
    l2.append(name_a + ' and ' + name_b)

Если вы используете Python 3.6+, вы можете использовать f-строку:

l2 = []

for name_a, name_b in zip(l1[0], l1[1]):
    l2.append(f'{name_a} and {name_b}')

Также имейте в виду, что вы также можете использовать список-понимание.

Python 3,6 +

l2 = [f'{name_a} and {name_b}' for name_a, name_b in zip(l1[0], l1[1])]
l2 = [name_a + ' and ' + name_b for name_a, name_b in zip(l1[0], l1[1])]

Примечание: Если вам не разрешено использовать zip, используйте rangeи используйте индексную запись следующим образом:

l2 = []

for i in range(len(l1[0])):
    name_a = l1[0][i]
    name_b = l1[1][i]
    l2.append(name_a + ' and ' + name_b)

Обновление: на основе предыдущих комментариев, вы должны использовать следующее:

l2 = []

for i in range(len(l1[0])):
    l2.append(' and '.join(e[i] for e in l1))

1 голос
/ 30 сентября 2019

Вы можете использовать zip, чтобы получить комбинацию имен из подсписков, и список, имеющий повторение "и", сколько раз элементы присутствуют в первом списке one[0]:

one = [['Patrick', 'Peter', 'Jerome'], ['Lisa', 'Karen', 'Alice']]
name_tup = zip(one[0], ["and"] * len(one[0]), one[1])

Затем используйте понимание списка, чтобы сгенерировать список out из кортежа, возвращаемого zip. При распаковке три элемента соединяются пробелами между ними с помощью функции join:

list = [ " ".join([x, y, z]) for x, y, z in name_tup]

>>> list
['Patrick and Lisa', 'Peter and Karen', 'Jerome and Alice']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...