ดังนั้นฉันมีรายการ:
['x', 3, 'b']
และฉันต้องการให้ผลลัพธ์เป็น:
[x, 3, b]
ฉันจะทำสิ่งนี้ใน python ได้อย่างไร?
ถ้าฉันทำstr(['x', 3, 'b'])ฉันจะได้รับหนึ่งพร้อมคำพูด แต่ฉันไม่ต้องการคำพูด
ดังนั้นฉันมีรายการ:
['x', 3, 'b']
และฉันต้องการให้ผลลัพธ์เป็น:
[x, 3, b]
ฉันจะทำสิ่งนี้ใน python ได้อย่างไร?
ถ้าฉันทำstr(['x', 3, 'b'])ฉันจะได้รับหนึ่งพร้อมคำพูด แต่ฉันไม่ต้องการคำพูด
คำตอบ:
ใน Python 2:
mylist = ['x', 3, 'b']
print '[%s]' % ', '.join(map(str, mylist))
ใน Python 3 (ซึ่งprintเป็นฟังก์ชัน builtin และไม่ใช่คุณสมบัติทางไวยากรณ์อีกต่อไป):
mylist = ['x', 3, 'b']
print('[%s]' % ', '.join(map(str, mylist)))
ผลตอบแทนทั้งสอง:
[x, 3, b]
นี้คือการใช้map()ฟังก์ชั่นที่จะเรียก STR สำหรับองค์ประกอบของแต่ละmyliststr.join()สร้างรายการใหม่ของสายที่จะเข้าร่วมแล้วเป็นหนึ่งเดียวกับสตริง จากนั้น%สตริงการจัดรูปแบบดำเนินการแทนสตริงในแทนใน%s"[%s]"
mapฟังก์ชั่นที่จะเรียกstrองค์ประกอบของแต่ละสร้างรายการใหม่ของสตริงที่แล้วเขาก็เข้าร่วมเป็นหนึ่งกับสตริงmylist str.joinจากนั้นเขาใช้%สตริงการจัดรูปแบบผู้ประกอบการเพื่อทดแทนสตริงในแทนใน%s "[%s]"
"[{0}]".format(", ".join(str(i) for i in mylist))
map(f, xs)(หรือimapใน python2.x) มากกว่า(f(x) for x in xs)เมื่อfเป็น callable ที่กำหนดไว้ล่วงหน้า ซึ่งมีแนวโน้มที่จะรัน bytecodes น้อยลงและโดยปกติจะมีขนาดกะทัดรัดกว่า แน่นอนว่าไม่ map(lambda x:..., xs)เลวร้ายไปกว่านี้(... for x in xs)
นี่เป็นรหัสง่ายๆดังนั้นหากคุณยังใหม่คุณควรเข้าใจมันได้ง่ายพอ
mylist = ["x", 3, "b"]
for items in mylist:
print(items)
มันพิมพ์ทั้งหมดโดยไม่มีเครื่องหมายคำพูดเหมือนที่คุณต้องการ
ใช้พิมพ์อย่างเดียว:
>>> l = ['x', 3, 'b']
>>> print(*l, sep='\n')
x
3
b
>>> print(*l, sep=', ')
x, 3, b
หากคุณใช้ Python3:
print('[',end='');print(*L, sep=', ', end='');print(']')
print(end='['); print(*l, sep=', ', end=']\n')
แทนที่จะใช้mapฉันขอแนะนำให้ใช้นิพจน์ตัวสร้างที่มีความสามารถในjoinการยอมรับตัววนซ้ำ:
def get_nice_string(list_or_iterator):
return "[" + ", ".join( str(x) for x in list_or_iterator) + "]"
นี่เป็นหน้าที่สมาชิกของชั้นเรียนสตริงjoin strใช้อาร์กิวเมนต์เดียว: รายการ (หรือตัววนซ้ำ) ของสตริงจากนั้นส่งคืนสตริงใหม่ที่มีองค์ประกอบทั้งหมดที่เชื่อมต่อกันในกรณี,นี้
", ".join( str(x) for x in list_or_iterator).join('[]')
คุณสามารถลบตัวอักษรที่ไม่พึงประสงค์จากการใช้สตริงของtranslate()วิธีการที่มีNoneสำหรับtableการโต้แย้งตามด้วยสตริงที่มีตัวอักษร (s) ที่คุณต้องการลบออกของdeletecharsอาร์กิวเมนต์
lst = ['x', 3, 'b']
print str(lst).translate(None, "'")
# [x, 3, b]
หากคุณใช้ Python เวอร์ชันก่อน 2.6 คุณจะต้องใช้ฟังก์ชันstringของโมดูลtranslate()แทนเนื่องจากความสามารถในการส่งผ่านNoneเนื่องจากtableอาร์กิวเมนต์ไม่ได้ถูกเพิ่มจนกว่า Python 2.6 การใช้งานมีลักษณะดังนี้:
import string
print string.translate(str(lst), None, "'")
การใช้string.translate()ฟังก์ชั่นนี้จะใช้งานได้ใน 2.6+ ดังนั้นการใช้ฟังก์ชันนี้อาจดีกว่า
lst = ["it isn't", 3, 'b']==> ["it isnt", 3, b]และด้วยlst = ['it isn\'t', 3, 'b']
นี่คือเซสชันแบบโต้ตอบที่แสดงขั้นตอนบางอย่างในซับเดียวของ @ TokenMacGuy ขั้นแรกเขาใช้mapฟังก์ชันเพื่อแปลงแต่ละรายการในรายการเป็นสตริง (จริงๆแล้วเขากำลังสร้างรายการใหม่ไม่ใช่การแปลงรายการในรายการเก่า) จากนั้นเขาก็ใช้วิธีการสตริงjoinเพื่อรวมสตริงเหล่านั้นเข้าด้วยกัน', 'กัน ส่วนที่เหลือเป็นเพียงการจัดรูปแบบสตริงซึ่งค่อนข้างตรงไปตรงมา (แก้ไข: อินสแตนซ์นี้ตรงไปตรงมาการจัดรูปแบบสตริงโดยทั่วไปอาจค่อนข้างซับซ้อน)
โปรดทราบว่าการใช้joinเป็นวิธีที่ง่ายและมีประสิทธิภาพในการสร้างสตริงจากสตริงย่อยหลายตัวซึ่งมีประสิทธิภาพมากกว่าการทำโดยการเพิ่มสตริงลงในสตริงอย่างต่อเนื่องซึ่งเกี่ยวข้องกับการคัดลอกเบื้องหลังจำนวนมาก
>>> mylist = ['x', 3, 'b']
>>> m = map(str, mylist)
>>> m
['x', '3', 'b']
>>> j = ', '.join(m)
>>> j
'x, 3, b'
ใช้.formatสำหรับการจัดรูปแบบสตริง
mylist = ['x', 3, 'b']
print("[{0}]".format(', '.join(map(str, mylist))))
เอาท์พุต:
[x, 3, b]
คำอธิบาย:
mapใช้เพื่อแมปแต่ละองค์ประกอบของรายการที่จะstringพิมพ์,ตัวคั่น[และ]ในคำสั่งพิมพ์เพื่อแสดงวงเล็บปีกกาการอ้างอิง:
.formatสำหรับการจัดรูปแบบสตริง PEP-3101
.formatวิธี pythonic มากที่สุด แต่แน่นอนฉันยอมรับความไม่เห็นด้วย ;)
ฉันได้รับแรงบันดาลใจจาก @AniMenon ในการเขียนวิธีแก้ปัญหาทั่วไปของ pythonic
mylist = ['x', 3, 'b']
print('[{}]'.format(', '.join(map('{}'.format, mylist))))
มันใช้formatวิธีการเท่านั้น ไม่มีร่องรอยstrและช่วยให้สามารถปรับแต่งรูปแบบองค์ประกอบได้อย่างละเอียด ตัวอย่างเช่นหากคุณมีตัวเลขทศนิยมเป็นองค์ประกอบของรายการคุณสามารถปรับรูปแบบได้โดยการเพิ่มตัวระบุการแปลงในกรณีนี้:.2f
mylist = [1.8493849, -6.329323, 4000.21222111]
print("[{}]".format(', '.join(map('{:.2f}'.format, mylist))))
ผลลัพธ์ค่อนข้างดี:
[1.85, -6.33, 4000.21]
print(["Sam"])โทรrepr("Sam")ซึ่งส่งกลับ'Sam'(พร้อมเครื่องหมายคำพูด) ซึ่งแตกต่างจากเมื่อคุณเรียกprint("Sam")และการเรียกpythonstr("Sam")ซึ่งส่งคืนSam(โดยไม่มีเครื่องหมายอัญประกาศ) ดูความแตกต่างระหว่างstrและreprหรือPythonstrและlistsสำหรับข้อมูลเพิ่มเติม