Python: ต่อท้ายรายการเพื่อแสดง N ครั้ง


93

ดูเหมือนว่า Python จะมีทางลัดให้ ฉันต้องการต่อท้ายรายการในรายการ N ครั้งโดยทำสิ่งนี้อย่างมีประสิทธิภาพ:

l = []
x = 0
for i in range(100):
    l.append(x)

สำหรับฉันแล้วดูเหมือนว่าควรมีวิธีการที่ "ปรับให้เหมาะสม" เช่น

l.append_multiple(x, 100)

มีมั้ย?


9
จบลงด้วยการที่l.extend([x] * 100)มันเข้ากับสถานการณ์ของฉันได้ดีที่สุด แอมเบอร์ได้รับเครดิตคำตอบว่าครอบคลุมมากที่สุด ขอบคุณ!
Toji

4
ตรวจสอบให้แน่ใจว่าคุณเข้าใจความหมายอ้างอิงของ Python ก่อนที่จะใช้สิ่งนี้สำหรับสิ่งที่ไม่สำคัญ x ของ x ต่อท้าย l จะมีค่า x เท่ากันทั้งหมดดังนั้นการกลายพันธุ์อย่างใดอย่างหนึ่งจึงส่งผลกระทบต่อพวกมันทั้งหมด (ทั้งหมดหนึ่งในนั้นอ้างถึง 100 ครั้ง)
Karl Knechtel

1
เพื่อความกระจ่าง: ฉันใช้มันสำหรับจำนวนเต็มดังนั้นการใช้งานของฉันจึงปลอดภัย
Toji

คำตอบ:


136

สำหรับชนิดข้อมูลที่ไม่เปลี่ยนรูป:

l = [0] * 100
# [0, 0, 0, 0, 0, ...]

l = ['foo'] * 100
# ['foo', 'foo', 'foo', 'foo', ...]

สำหรับค่าที่จัดเก็บโดยการอ้างอิงและคุณอาจต้องการแก้ไขในภายหลัง (เช่นรายการย่อยหรือคำสั่ง):

l = [{} for x in range(100)]

(เหตุผลที่วิธีแรกเป็นเพียงความคิดที่ดีสำหรับค่าคงที่เช่น ints หรือสตริงเนื่องจากมีเพียงสำเนาตื้นเท่านั้นที่ทำเมื่อใช้<list>*<number>ไวยากรณ์ดังนั้นหากคุณทำสิ่งที่ต้องการ[{}]*100คุณจะได้รับการอ้างอิง 100 รายการ เป็นพจนานุกรมเดียวกันดังนั้นการเปลี่ยนหนึ่งในนั้นจะเปลี่ยนทั้งหมดเนื่องจาก ints และสตริงไม่เปลี่ยนรูปจึงไม่เป็นปัญหาสำหรับพวกเขา)

หากคุณต้องการเพิ่มลงในรายการที่มีอยู่คุณสามารถใช้extend()วิธีการของรายการนั้น (ร่วมกับการสร้างรายการสิ่งที่จะเพิ่มผ่านเทคนิคข้างต้น):

a = [1,2,3]
b = [4,5,6]
a.extend(b)
# a is now [1,2,3,4,5,6]

2
หรือรวมทั้งข้อเสนอแนะที่เป็นรูปแบบของการa.extend(b*n)ที่nเป็นเวลาที่คุณต้องการที่จะทำซ้ำองค์ประกอบในข
DarkCygnus



6

ฉันต้องไปเส้นทางอื่นเพื่อทำงาน แต่นี่คือสิ่งที่ฉันลงเอยด้วย

my_array += ([x] * repeated_times)


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