พิมพ์รายการโดยไม่ต้องวงเล็บในแถวเดียว


162

ฉันมีรายการใน Python เช่น

names = ["Sam", "Peter", "James", "Julian", "Ann"]

ฉันต้องการพิมพ์อาเรย์ในบรรทัดเดียวโดยไม่ใช้ "[]

names = ["Sam", "Peter", "James", "Julian", "Ann"]
print (names)

จะให้ผลลัพธ์เป็น;

["Sam", "Peter", "James", "Julian", "Ann"]

นั่นไม่ใช่รูปแบบที่ฉันต้องการ แต่ฉันต้องการให้มันเป็นอย่างนี้

Sam, Peter, James, Julian, Ann

หมายเหตุ: จะต้องอยู่ในแถวเดียว

คำตอบ:


242
print(', '.join(names))

สิ่งนี้ฟังดูเหมือนแค่รับองค์ประกอบทั้งหมดของรายการและรวมเข้าด้วย', 'กัน


9
หากองค์ประกอบบางอย่างnamesไม่ใช่สายอักขระให้ใช้print(', '.join(map(str,name)))แทน
ไม่ระบุชื่อ

78

นี่คือหนึ่งที่เรียบง่าย

names = ["Sam", "Peter", "James", "Julian", "Ann"]
print(*names, sep=", ")

ดาวจะคลายรายการและคืนทุกองค์ประกอบในรายการ


8
ในนี้เป็นpython 2.7.6 SyntaxError: invalid syntax
Fredrick Gauss

1
@FredrickGauss ถ้าคุณเพิ่มfrom __future__ import print_functionมันจะทำงานใน python 2 เช่นกัน
Anthony Sottile

1
นี่เป็นคำตอบที่ถูกต้องเพราะมันใช้ได้กับสตริงที่ไม่ใช่
otocan

41

วิธีแก้ปัญหาทั่วไปทำงานบนอาร์เรย์ของสตริงที่ไม่ใช่:

>>> print str(names)[1:-1]
'Sam', 'Peter', 'James', 'Julian', 'Ann'

9
สิ่งนี้ไม่เป็นไปตามข้อกำหนดที่ระบุไว้ สังเกตตัวอย่างของ OP ที่แสดงชื่อผลลัพธ์โดยไม่มีเครื่องหมายคำพูด
John Y

1
@SteveBennett คุณช่วยอธิบายการแบ่งส่วน [1: -1] ในคำตอบของคุณได้ไหม ฉันเพิ่งเริ่มเรียนรู้หลาม ขอบคุณ.
Charan

3
str(names)['Sam', 'Peter'...'Ann']สร้างสตริงเหมือน เราไม่ต้องการวงเล็บเหลี่ยมดังนั้นฝานจากอักขระที่ 2 ถึงอักขระสุดท้ายที่สอง
Steve Bennett

22

ถ้าอาร์เรย์ที่ป้อนเป็นชนิดจำนวนเต็มคุณต้องแปลงอาร์เรย์เป็นอาร์เรย์ชนิดสตริงก่อนจากนั้นใช้joinวิธีการเข้าร่วมกับ,หรือเว้นวรรคตามที่คุณต้องการ เช่น:

>>> arr = [1, 2, 4, 3]
>>> print(", " . join(arr))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: sequence item 0: expected string, int found
>>> sarr = [str(a) for a in arr]
>>> print(", " . join(sarr))
1, 2, 4, 3
>>>

การใช้โดยตรงของการเข้าร่วมซึ่งจะเข้าร่วมจำนวนเต็มและสตริงจะโยนข้อผิดพลาดตามที่แสดงด้านบน


18

มีสองคำตอบอันดับแรกคือใช้การตั้งค่า 'sep'

>>> print(*names, sep = ', ')

อื่น ๆ อยู่ด้านล่าง

>>> print(', '.join(names))


7

','.join(list)จะทำงานเฉพาะเมื่อรายการทั้งหมดในรายการเป็นสตริง หากคุณต้องการแปลงรายการของตัวเลขเป็นสตริงที่คั่นด้วยเครื่องหมายจุลภาค เช่นa = [1, 2, 3, 4]เข้าไป'1,2,3,4'แล้วคุณสามารถ

str(a)[1:-1] # '1, 2, 3, 4'

หรือ

str(a).lstrip('[').rstrip(']') # '1, 2, 3, 4'

แม้ว่าจะไม่ลบรายการซ้อน

เพื่อแปลงกลับเป็นรายการ

a = '1,2,3,4'
import ast
ast.literal_eval('['+a+']')
#[1, 2, 3, 4]

4

คุณจำเป็นต้องวนซ้ำรายการและใช้end=" "เพื่อเก็บไว้ในหนึ่งบรรทัด

names = ["Sam", "Peter", "James", "Julian", "Ann"]
    index=0
    for name in names:
        print(names[index], end=", ")
        index += 1

OP บอกว่ามันจะต้องอยู่ในแถวเดียว
อาลี

2

พิมพ์ (ชื่อ *)

สิ่งนี้จะทำงานในหลาม 3 หากคุณต้องการให้พิมพ์ออกมาเป็นช่องว่างคั่น หากคุณต้องการเครื่องหมายจุลภาคหรือสิ่งอื่นใดในระหว่างดำเนินการต่อด้วยโซลูชัน. join ()


1

ผมไม่ทราบว่านี้เป็นที่มีประสิทธิภาพเป็นคนอื่น แต่ตรรกะง่ายๆเสมอการทำงาน:

import sys
name = ["Sam", "Peter", "James", "Julian", "Ann"]
for i in range(0, len(names)):
    sys.stdout.write(names[i])
    if i != len(names)-1:
        sys.stdout.write(", ")

เอาท์พุท:

Sam, Peter, James, Julian, Ann


0

ฟังก์ชั่นต่อไปนี้จะใช้ในรายการและส่งคืนสตริงของรายการรายการ ซึ่งสามารถใช้สำหรับการบันทึกหรือการพิมพ์

def listToString(inList):
    outString = ''
    if len(inList)==1:
        outString = outString+str(inList[0])
    if len(inList)>1:
        outString = outString+str(inList[0])
        for items in inList[1:]:
            outString = outString+', '+str(items)
    return outString

0

สำหรับอาเรย์ของประเภทจำนวนเต็มเราจำเป็นต้องเปลี่ยนเป็นประเภทสตริงก่อนและกว่าใช้ฟังก์ชั่นเข้าร่วมเพื่อรับผลลัพธ์ที่สะอาดโดยไม่ต้องวงเล็บ

    arr = [1, 2, 3, 4, 5]    
    print(', '.join(map(str, arr)))

เอาท์พุท - 1, 2, 3, 4, 5

สำหรับอาเรย์ของประเภทสตริงเราจำเป็นต้องใช้ฟังก์ชั่นเข้าร่วมโดยตรงเพื่อรับเอาต์พุตที่สะอาดโดยไม่ต้องใส่วงเล็บ

    arr = ["Ram", "Mohan", "Shyam", "Dilip", "Sohan"]
    print(', '.join(arr)

เอาท์พุท - Ram, Mohan, Shyam, Dilip, Sohan

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