วิธีการบีบอัดรายการในรายการ


92

ฉันต้องการซิปรายการต่อไปนี้:

>>> zip([[1,2], [3,4], [5,6]])
[[1,3,5], [2,4,6]]

สิ่งนี้สามารถทำได้ด้วยการzipใช้งานปัจจุบันก็ต่อเมื่อรายการถูกแบ่งออกเป็นแต่ละองค์ประกอบ:

>>> zip([1,2], [3,4], [5,6])
   (1, 3, 5), (2, 4, 6)]

คิดไม่ออกว่าจะแบ่งรายการและส่งต่อองค์ประกอบแต่ละรายการไปยังzipอย่างไร ต้องการโซลูชันที่ใช้งานได้จริง

คำตอบ:


146

ลองสิ่งนี้:

>>> zip(*[[1,2], [3,4], [5,6]])
[(1, 3, 5), (2, 4, 6)]

ดูการคลายการบรรจุรายการอาร์กิวเมนต์ :

สถานการณ์ย้อนกลับเกิดขึ้นเมื่ออาร์กิวเมนต์อยู่ในรายการหรือทูเพิลอยู่แล้ว แต่จำเป็นต้องคลายแพ็กสำหรับการเรียกใช้ฟังก์ชันที่ต้องการอาร์กิวเมนต์ตำแหน่งแยกกัน ตัวอย่างเช่นฟังก์ชัน range () ในตัวต้องการอาร์กิวเมนต์เริ่มต้นและหยุดแยกกัน หากไม่มีให้ใช้งานแยกกันให้เขียนการเรียกใช้ฟังก์ชันด้วย * -operator เพื่อคลายข้อโต้แย้งออกจากรายการหรือทูเพิล:

>>> range(3, 6)             # normal call with separate arguments
[3, 4, 5]
>>> args = [3, 6]
>>> range(*args)            # call with arguments unpacked from a list
[3, 4, 5]

4
ดูวิธีการทำงานของdocs.python.org/tutorial/…
ameer

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