Объединение строки в список итеративно

#python #string #list #concatenation

#python #строка #Список #объединение

Вопрос:

Итак, я пытаюсь объединить строку в список, но по какой-то причине это работает только для самых последних значений:

 labels_and_sents = []
for l in labels:
    for s in sents:
        sl = [l]   s
    
 labels_and_sents.append(sl)
 

Ввод:

 labels = ['1','2','3']
sents = [['hi hello'], ['i was there'], ['this is a sent']]
 

Вывод:

 [['3', 'this is a sent']]
 

Что мне нужно, так это:

 [['1', 'hi hello'],['2', 'i was there'],['3', 'this is a sent']]
 

Комментарии:

1. output = list(zip(labels, sents))

2. sl перезаписывается на каждой итерации внутреннего цикла

3. Кроме того, на самом деле не имеет смысла помещать цикл внутри цикла, поскольку тогда вы получите 3 * 3 = 9 элементов.

Ответ №1:

Для меня это выглядит как задача для map , я бы сделал

 labels = ['1','2','3']
sents = [['hi hello'], ['i was there'], ['this is a sent']]
output = list(map(lambda x,y:[x] y,labels,sents))
print(output)
 

Вывод:

 [['1', 'hi hello'], ['2', 'i was there'], ['3', 'this is a sent']]
 

Объяснение: для каждой пары соответствующих элементов из labels и sents я упаковываю первый в list , а затем объединяю с последним. Предполагается, что это решение len(labels)==len(sents) выполняется True .

Ответ №2:

Если вы хотите сделать это только с помощью цикла, попробуйте выполнить следующее:

 labels = ['1','2','3']
sents = [['hi hello'], ['i was there'], ['this is a sent']]
output = []

for i in range(len(labels)):
    output.append([ labels[i], sents[i][0] ])
print(output)
 

вывод:

 [['1', 'hi hello'], ['2', 'i was there'], ['3', 'this is a sent']]