วนรอบรายการใน Python


177

ฉันมีรายการที่มีรายการย่อยในนั้น ฉันต้องการพิมพ์รายการย่อยทั้งหมดที่มีความยาวเท่ากับ 3

ฉันกำลังทำสิ่งต่อไปนี้ในหลาม:

for x in values[:]:
    if len(x) == 3:
        print(x)

valuesเป็นรายการดั้งเดิม โค้ดด้านบนพิมพ์ทุกรายการย่อยที่มีความยาวเท่ากับ 3 สำหรับแต่ละค่าxหรือไม่? ฉันต้องการที่จะแสดงรายการย่อยที่length == 3เดียวเท่านั้น

ปัญหาได้รับการแก้ไขแล้ว ปัญหาเกิดขึ้นกับตัวแก้ไข Eclipse ฉันไม่เข้าใจเหตุผล แต่แสดงเพียงครึ่งหนึ่งของรายการเมื่อเรียกใช้ลูป

มีการตั้งค่าใด ๆ ที่ฉันต้องเปลี่ยนใน Eclipse หรือไม่?


1
คุณสามารถทำprint valuesและแสดงผลลัพธ์ที่นี่ได้หรือไม่ แก้ไข:หรือเพียงตรวจสอบว่าไม่ว่างเปล่า
Brigand

1
คำตอบที่ดีที่สุด: stackoverflow.com/a/28072982/4561887
Gabriel Staples

คำตอบ:


196

ลองนี้

x in mylistจะดีกว่าและสามารถอ่านได้มากกว่าx in mylist[:]และคุณควรจะเท่ากับlen(x)3

>>> mylist = [[1,2,3],[4,5,6,7],[8,9,10]]
>>> for x in mylist:
...      if len(x)==3:
...        print x
...
[1, 2, 3]
[8, 9, 10]

หรือถ้าคุณต้องการความเข้าใจในการใช้รายการข้อมูลเพิ่มเติม

>>> [x for x in mylist if len(x)==3]
[[1, 2, 3], [8, 9, 10]]
>>>

15

คุณอาจจะใช้for x in valuesมากกว่าfor x in values[:]; หลังทำสำเนาที่ไม่จำเป็น นอกจากนี้แน่นอนว่ารหัสตรวจสอบความยาว 2 แทนที่จะเป็น 3 ...

รหัสจะพิมพ์เพียงหนึ่งรายการต่อมูลค่าx- และxวนซ้ำองค์ประกอบของvaluesซึ่งเป็นรายการย่อย ดังนั้นมันจะพิมพ์แต่ละรายการย่อยครั้งเดียวเท่านั้น


4
ค่า [:] แบ่งองค์ประกอบทั้งหมดของค่าใช่ไหม ฉันสมมติว่าคุณหมายถึงรายการชั่วคราวที่สร้างขึ้นจากการแบ่งส่วน แค่ต้องการให้แน่ใจ
batbrat

1
ขอขอบคุณที่พูดถึงสำเนาที่ไม่ต้องการ @batbrat valuesมันไม่ได้ชิ้นออกชิ้นมันออกสิ่งที่ผมหมายถึงคือว่าค่าที่จะทำซ้ำและยังคงอยู่ใน
AsTeR

ขอบคุณสำหรับการชี้แจง
batbrat

14

นี่คือทางออกที่ฉันกำลังมองหา หากคุณต้องการสร้าง List2 ที่มีความแตกต่างขององค์ประกอบตัวเลขใน List1

list1 = [12, 15, 22, 54, 21, 68, 9, 73, 81, 34, 45]
list2 = []
for i in range(1, len(list1)):
  change = list1[i] - list1[i-1]
  list2.append(change)

โปรดทราบว่าในขณะที่len(list1)11 (องค์ประกอบ) len(list2)จะเป็นเพียง 10 องค์ประกอบเพราะเราเริ่มต้นของเราสำหรับวงจากองค์ประกอบที่มีดัชนี 1 ในรายการ 1 ไม่ได้มาจากองค์ประกอบที่มีดัชนี 0 ในรายการ 1


นี่เป็นสิ่งที่ฉันต้องการเพราะฉันต้องเริ่มจากดัชนี 1 ไม่ใช่ 0 +1
timv

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