ดังนั้นฉันมีรายการ:
['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
และlist
sสำหรับข้อมูลเพิ่มเติม