#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']]