เชื่อมต่อรายการในรายการกับสตริง


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)
Aland

คำตอบ:


1052

การใช้join:

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

13
ไม่เข้าใจว่า '-' ทางซ้ายควรเป็นอะไร?
Lawrence DeSouza

5
@LawrenceDeSouza สตริงที่คุณต้องการเข้าร่วม; ดูเอกสารประกอบหรือคำตอบนี้ซึ่งมีรายละเอียดเพิ่มเติมเล็กน้อย
Burhan Khalid

9
ชนิดของฉันคาดว่าในการทำงานเช่นกันเนื่องจากการดำเนินงานกลับเป็นsentence.join(" ") list.split(" ")มีความคิดใดบ้างไหมถ้าสิ่งนี้จะถูกเพิ่มเข้าไปในวิธีการของ Python สำหรับรายการ?
Wouter Thielen

10
@ รองเท้ามันจะไม่ ในอีกด้านหนึ่งรายการสตริงเท่านั้นที่สามารถเข้าร่วมได้ ดังนั้นlist.joinจะไม่เหมาะสมสำหรับรายการโดยพลการ ที่อื่นอาร์กิวเมนต์ของstr.joinสามารถเป็นลำดับ "iterable" ของสตริงไม่เพียงรายการ สิ่งเดียวที่ทำให้เข้าใจได้คือฟังก์ชั่นในตัวjoin(list, sep); มีหนึ่งในstringโมดูล(ล้าสมัยโดยทั่วไป) ถ้าคุณต้องการมัน
alexis

4
@Leo' '.join(['this', 'is', 'a', 'sentence'])
Burhan Khalid

120

วิธีทั่วไปมากขึ้นในการแปลงรายการหลามเป็นสตริงจะเป็น:

>>> 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
คำตอบส่วนใหญ่สำหรับคำถามนี้กำลังพิจารณากรณีเมื่อรายการมีสตริงอยู่ Mine เป็นวิธีทั่วไปในการแปลงรายการเป็นสตริง ในตัวอย่างของฉันรายการเป็นประเภทintแต่อาจเป็นประเภทใดก็ได้ที่สามารถแสดงเป็นสตริง
6pack kid

3
เพื่อเพิ่มในแผนที่นี้จะเป็นประโยชน์เมื่อใช้กับฟังก์ชั่นแลมบ์ดา ตัวอย่างเช่น' '.join(map(lambda x: ' $'+ str(x), my_lst))จะกลับมา'$1 $2 $3 $4 $5 $6 $7 $8 $9 $10'
ScottMcC

3
การเพิ่มแผนที่ช่วยด้วยประเภทข้อมูลนอกเหนือจากสตริง ที่ดี!
appleboy

40

มันมีประโยชน์มากสำหรับผู้เริ่มต้นที่จะรู้ ว่าทำไมเข้าร่วมเป็นวิธีสตริง

ตอนแรกมันแปลกมาก แต่มีประโยชน์มากหลังจากนี้

ผลลัพธ์ของการรวมเป็นสตริงเสมอ แต่วัตถุที่จะเข้าร่วมอาจมีหลายประเภท (เครื่องกำเนิดไฟฟ้ารายการ tuples ฯลฯ )

.joinเร็วกว่าเพราะจัดสรรหน่วยความจำได้เพียงครั้งเดียว ดีกว่าการต่อข้อมูลแบบคลาสสิก (ดูอธิบายเพิ่มเติม )

เมื่อคุณเรียนรู้มันสบายมากและคุณสามารถทำเทคนิคเช่นนี้เพื่อเพิ่มวงเล็บ

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

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

12

แม้ว่าคำตอบของ @Burhan Khalidนั้นดี แต่ฉันคิดว่ามันเข้าใจได้มากกว่านี้:

from str import join

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

join(sentence, "-") 

อาร์กิวเมนต์ที่สองเพื่อเข้าร่วม () เป็นทางเลือกและเป็นค่าเริ่มต้นเป็น ""

แก้ไข: ฟังก์ชั่นนี้ถูกลบใน Python 3


14
ฟังก์ชั่นนี้เลิกใช้แล้วใน 2.x และจะถูกลบใน 3.x ในกรณีนี้ฉันไม่แนะนำให้ใช้คำตอบนี้นอกเหนือจากที่ระบุไว้
Matthew Green

@Mathew Green คำตอบนี้และคำตอบของ Burhan Khalid ใช้ฟังก์ชั่นเดียวกันในรูปแบบที่แตกต่างกันดังนั้นคำตอบของเขาก็ถูกยกเลิกเช่นกัน แต่ขอบคุณสำหรับการชี้ให้เห็นว่า gota หาวิธีเข้าร่วมใน 3.x แต่ถ้าคุณใช้ 2.x มันจะไม่หายไป
SilentVoid

1
แม้ว่าเขาจะไม่เลิกใช้ก็ตาม คำแนะนำของคุณใช้ฟังก์ชั่นจาก Lib / string.py ซึ่งแตกต่างอย่างสิ้นเชิงและเลิกใช้ในขณะที่ @BurhanKhalid คำตอบใช้วิธีสตริงในตัวซึ่งไม่ได้คัดค้าน คำตอบของเขาคือคำตอบที่ถูกต้องที่สุดในขณะนี้และก้าวไปข้างหน้าในขณะที่สิ่งนี้ดีสำหรับตอนนี้ที่ 2.x
Matthew Green

ทั้งหมดที่จะบอกว่าถ้าคุณต้องการส่งเสริมทางเลือกนี้คุณควรรวมคำเตือนว่าไม่แนะนำด้วยเหตุผลที่ระบุไว้ในความคิดเห็นก่อนหน้าของฉัน
Matthew Green

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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.