Об'єднайте елемент у списку до рядків


574

Чи є більш простий спосіб об'єднати рядкові елементи зі списку в один рядок? Чи можна використовувати цю str.join()функцію?

Наприклад, це вхід, ['this','is','a','sentence']і це бажаний вихідthis-is-a-sentence

sentence = ['this','is','a','sentence']
sent_str = ""
for i in sentence:
    sent_str += str(i) + "-"
sent_str = sent_str[:-1]
print sent_str

24
'-'.join(sentence)
аланд

Відповіді:


1052

Використання join:

>>> sentence = ['this','is','a','sentence']
>>> '-'.join(sentence)
'this-is-a-sentence'

13
Не зрозумів, що має бути "-" зліва ??
Лоуренс Де Суза

5
@LawrenceDeSouza Рядок, до якого потрібно приєднатись; дивіться документацію або цю відповідь, яка детальніше описується.
Бурхан Халід

9
Я, начебто, sentence.join(" ")також працював, оскільки зворотна операція є list.split(" "). Будь-яка ідея, якщо це буде додано до методів Python для списків?
Wouter Thielen

10
@Wouter, не буде. З одного боку, можна з'єднати лише списки рядків; тому list.joinбуло б недоцільно для довільного списку. З іншого боку, аргументом str.joinможе бути будь-яка "ітерабельна" послідовність рядків, а не лише список. Єдине, що мало б сенс - це вбудована функція join(list, sep); в stringмодулі є (в основному застарілий), якщо ви цього дуже хочете.
alexis

4
@Leo' '.join(['this', 'is', 'a', 'sentence'])
Бурхан Халід

120

Більш загальним способом перетворення списків python в рядки буде:

>>> my_lst = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
>>> my_lst_str = ''.join(map(str, my_lst))
>>> print(my_lst_str)
'12345678910'

3
чому потрібне розуміння списку, коли введення є рядковим? також map(str, my_lst)вистачило б, не перераховуючи список =)
alvas

5
Більшість відповідей на це питання розглядають випадок, коли в списку є рядки. Шахта - це загальний спосіб перетворення списків у рядки. У моєму прикладі список має тип, intале це може бути будь-який тип, який може бути представлений у вигляді рядка.
6pack kid

3
Щоб додати до цього, карта також була б корисною при використанні з лямбда-функцією. Наприклад ' '.join(map(lambda x: ' $'+ str(x), my_lst)), повернеться'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
ScottMcC

3
додавання карти насправді допомагає для типів даних, крім рядкових. Чудово!
яблуко

40

Початківцям дуже корисно знати, чому приєднання - це рядковий метод .

Це дуже дивно на початку, але дуже корисно після цього.

Результатом об'єднання завжди є рядок, але об'єкт, який слід об'єднати, може бути багатьох типів (генератори, список, кортежі тощо).

.joinшвидше, оскільки він виділяє пам'ять лише один раз. Краще, ніж класичне конкатенація (див., Розширене пояснення ).

Після того, як ви дізнаєтесь це, це дуже зручно, і ви можете робити подібні трюки, щоб додати дужки.

>>> ",".join("12345").join(("(",")"))
Out:
'(1,2,3,4,5)'

>>> list = ["(",")"]
>>> ",".join("12345").join(list)
Out:
'(1,2,3,4,5)'

12

Хоча відповідь @ Бурхана Халіда хороша, я думаю, що це зрозуміліше так:

from str import join

sentence = ['this','is','a','sentence']

join(sentence, "-") 

Другий аргумент для приєднання () є необов'язковим і за умовчанням "".

EDIT: Ця функція була видалена в Python 3


14
Ця функція застаріла в 2.x і буде видалена в 3.x. У цьому випадку я не рекомендував би використовувати це над іншою наданою відповіддю.
Меттью Грін

@Mathew Green ця відповідь і відповідь Бурхана Халіда використовують одну і ту ж функцію по-різному, тому його відповідь також застаріла. Але дякую, що вказали на це, я мушу зрозуміти, як приєднатися до 3.x. Але якщо ви використовуєте 2.x, це не піде.
SilentVoid

1
Однак його не застаріли. У вашій рекомендації використовується функція Lib / string.py, яка зовсім інша та застаріла, тоді як у відповіді @BurhanKhalid використовується вбудований рядовий метод, який не є застарілим. Його відповідь є найбільш правильною зараз і йде вперед, тоді як це добре лише зараз 2.x.
Меттью Грін

Все, що потрібно сказати, що якщо ви хочете просувати цю альтернативу, вам слід також включити попередження, що це не рекомендується з причин, викладених у моїх попередніх коментарях.
Меттью Грін

2

Ми можемо вказати, як нам приєднатися до рядка. Замість "-" ми можемо використовувати ""

sentence = ['this','is','a','sentence']
s=(" ".join(sentence))
print(s)

2

Ми також можемо використовувати функцію зменшення Python :

from functools import reduce

sentence = ['this','is','a','sentence']
out_str = str(reduce(lambda x,y: x+"-"+y, sentence))
print(out_str)

4
Занадто багато зайвої складності, чому б не просто використовувати join?
Себастьян Пальма

-1
def eggs(someParameter):
    del spam[3]
    someParameter.insert(3, ' and cats.')


spam = ['apples', 'bananas', 'tofu', 'cats']
eggs(spam)
spam =(','.join(spam))
print(spam)

2
Хоча цей фрагмент коду може бути вирішенням, включаючи пояснення, справді допомагає покращити якість вашої публікації. Пам’ятайте, що ви відповідаєте на запитання читачів у майбутньому, і ці люди можуть не знати причини вашої пропозиції щодо коду.
alan.elkin
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.