การเข้าถึงดัชนีในลูป 'สำหรับ' หรือไม่


3604

ฉันจะเข้าถึงดัชนีในforลูปดังต่อไปนี้ได้อย่างไร

ints = [8, 23, 45, 12, 78]
for i in ints:
    print('item #{} = {}'.format(???, i))

ฉันต้องการเอาท์พุทนี้:

item #1 = 8
item #2 = 23
item #3 = 45
item #4 = 12
item #5 = 78

เมื่อฉันวนลูปโดยใช้forลูปฉันจะเข้าถึงดัชนีลูปได้อย่างไรจาก 1 ถึง 5 ในกรณีนี้


42
โปรดทราบว่าดัชนีใน python เริ่มต้นจาก 0 ดังนั้นดัชนีสำหรับรายการตัวอย่างของคุณคือ 0 ถึง 4 ไม่ใช่ 1 ถึง 5
plugwash

คำตอบ:


6112

การใช้ตัวแปรสถานะเพิ่มเติมเช่นตัวแปรดัชนี (ซึ่งโดยปกติแล้วคุณจะใช้ในภาษาเช่น C หรือ PHP) จะถือว่าไม่ใช่แบบ pythonic

ตัวเลือกที่ดีกว่าคือการใช้ฟังก์ชั่นenumerate()ในตัวมีทั้ง Python 2 และ 3:

for idx, val in enumerate(ints):
    print(idx, val)

ลองดูPEP 279เพิ่มเติม


61
แอรอนชี้ให้เห็นด้านล่างใช้ start = 1 หากคุณต้องการได้รับ 1-5 แทน 0-4
clozach

2
ไม่enumerateต้องเสียค่าใช้จ่ายอีกหรือ
TheRealChx101

@ TheRealChx101 ตามการทดสอบของฉัน (Python 3.6.3) ความแตกต่างนั้นเล็กน้อยและบางครั้งก็เห็นenumerateด้วย
Błotosmętek

804

ใช้ a สำหรับลูปฉันจะเข้าถึงดัชนีลูปได้อย่างไรจาก 1 ถึง 5 ในกรณีนี้

ใช้enumerateเพื่อรับดัชนีพร้อมองค์ประกอบในขณะที่คุณทำซ้ำ:

for index, item in enumerate(items):
    print(index, item)

และโปรดทราบว่าดัชนีของไพ ธ อนเริ่มต้นที่ศูนย์ดังนั้นคุณจะได้ 0 ถึง 4 ตามด้านบน หากคุณต้องการการนับ 1 ถึง 5 ให้ทำดังนี้:

for count, item in enumerate(items, start=1):
    print(count, item)

การควบคุมแบบไม่ไหล

สิ่งที่คุณต้องการคือ Pythonic ที่เทียบเท่ากับสิ่งต่อไปนี้ซึ่งเป็นอัลกอริธึมที่โปรแกรมเมอร์ส่วนใหญ่ใช้ภาษาระดับต่ำกว่า:

index = 0            # Python's indexing starts at zero
for item in items:   # Python's for loops are a "for each" loop 
    print(index, item)
    index += 1

หรือในภาษาที่ไม่มีลูปสำหรับแต่ละวง:

index = 0
while index < len(items):
    print(index, items[index])
    index += 1

หรือบางครั้งพบมากขึ้น (แต่ไม่พบโดยไม่รู้ตัว) ใน Python:

for index in range(len(items)):
    print(index, items[index])

ใช้ฟังก์ชั่นการแจกแจง

enumerateฟังก์ชั่นของ Python ช่วยลดความยุ่งเหยิงทางสายตาโดยการซ่อนการบัญชีสำหรับดัชนีและห่อหุ้ม iterable ลงใน iterable อีกอันหนึ่ง ( enumerateวัตถุ) ที่ให้ผลลัพธ์เป็นสองสิ่งสองสิ่งของดัชนีและรายการที่มันสามารถทำได้ ดูเหมือนว่า:

for index, item in enumerate(items, start=0):   # default is zero
    print(index, item)

ตัวอย่างโค้ดนี้ค่อนข้างดีเป็นที่ยอมรับตัวอย่างของความแตกต่างระหว่างรหัสที่เป็นสำนวนของงูใหญ่และรหัสที่ไม่ได้เป็น รหัสสำนวนมีความซับซ้อน (แต่ไม่ซับซ้อน) Python เขียนในลักษณะที่ตั้งใจจะใช้ ผู้ออกแบบภาษาต้องคาดหวังรหัสภาษาซึ่งหมายความว่าโดยปกติแล้วรหัสนี้จะไม่เพียง แต่อ่านง่ายขึ้น แต่ยังมีประสิทธิภาพมากกว่า

ได้รับการนับ

แม้ว่าคุณไม่ต้องการดัชนีในขณะที่คุณไป แต่คุณต้องมีการนับซ้ำ (บางครั้งเป็นที่ต้องการ) คุณสามารถเริ่มต้นด้วย1และหมายเลขสุดท้ายจะเป็นจำนวนของคุณ

for count, item in enumerate(items, start=1):   # default is zero
    print(item)

print('there were {0} items printed'.format(count))

การนับดูเหมือนจะเป็นสิ่งที่คุณตั้งใจจะขอ (เมื่อเทียบกับดัชนี) เมื่อคุณพูดว่าคุณต้องการตั้งแต่ 1 ถึง 5


ทำลายมันลง - คำอธิบายทีละขั้นตอน

หากต้องการทำลายตัวอย่างเหล่านี้สมมติว่าเรามีรายการที่เราต้องการทำซ้ำด้วยดัชนี:

items = ['a', 'b', 'c', 'd', 'e']

ตอนนี้เราผ่าน iterable นี้เพื่อแจกแจงสร้างวัตถุแจกแจง:

enumerate_object = enumerate(items) # the enumerate object

เราสามารถดึงไอเท็มแรกออกมาจาก iterable นี้ที่เราจะได้วนเข้ากับnextฟังก์ชัน:

iteration = next(enumerate_object) # first iteration from enumerate
print(iteration)

และเราเห็นว่าเราได้รับ tuple จาก0ดัชนีแรกและ'a'รายการแรก:

(0, 'a')

เราสามารถใช้สิ่งที่เรียกว่า " ลำดับการเปิดออก " เพื่อแยกองค์ประกอบจากสอง tuple นี้:

index, item = iteration
#   0,  'a' = (0, 'a') # essentially this.

และเมื่อเราตรวจสอบindexเราพบว่ามันหมายถึงดัชนีแรก 0 และitemอ้างอิงถึงรายการแรก, 'a'.

>>> print(index)
0
>>> print(item)
a

ข้อสรุป

  • ดัชนี Python เริ่มต้นที่ศูนย์
  • ในการรับดัชนีเหล่านี้จากการทำซ้ำในขณะที่คุณทำซ้ำมากกว่านั้นให้ใช้ฟังก์ชันการแจกแจง
  • การใช้แจงนับในทางที่เป็นสำนวน (พร้อมกับการเปิดไฟล์ tuple) สร้างรหัสที่อ่านได้ง่ายและบำรุงรักษามากขึ้น:

ดังนั้นทำสิ่งนี้:

for index, item in enumerate(items, start=0):   # Python indexes start at zero
    print(index, item)

1
ตัวอย่าง " การนับจำนวน " ทำงานเมื่อitemsว่างเปล่าหรือไม่
Bergi

ผมส่งข้อมูลโดยใช้อาแจ็กซ์ไปยังมุมมอง Django เป็นอาร์เรย์ในรูปแบบของสองค่าในตัวแปรlegData[1406, 1409]ที่มีค่าเป็น ถ้าฉันพิมพ์ไปยังคอนโซลใช้print(legData)ผลลัพธ์คือ[1406,1409] อย่างไรก็ตามถ้าฉันพยายามที่จะแยกค่าแต่ละรายการเช่นfor idx, xLeg in enumerate(legData): print(idx, xLeg)นั้นมันทำให้ฉันออกจำนวนเต็มของแต่ละบุคคลเช่น [, 1, 4, 0, 6, และอื่น ๆ กับดัชนี0, 1, 2, 3, 4เป็นต้น (ใช่แล้วเครื่องหมายวงเล็บเหลี่ยมและเครื่องหมายจุลภาคก็กำลังถูกส่งออกเหมือนเป็นส่วนหนึ่งของข้อมูลเอง ) เกิดอะไรขึ้นที่นี่?
user12379095

@ user12379095 คุณอาจมีข้อมูลผิดประเภท (สตริง) และคุณต้องแปลงเป็นรายการตัวเลขจริงแทนที่จะเป็นสตริง นี่เป็นหัวข้อที่ค่อนข้างไม่ถูกต้องที่นี่โปรดลบความคิดเห็นและตั้งค่าสถานะของฉันที่จะลบตามที่ไม่จำเป็นเมื่อคุณเห็นสิ่งนี้
Aaron Hall

152

มันค่อนข้างง่ายที่จะเริ่มจากที่1อื่น0:

for index, item in enumerate(iterable, start=1):
   print index, item

บันทึก

คำใบ้สำคัญแม้ว่าจะทำให้เข้าใจผิดเล็กน้อยเพราะindexจะเป็นtuple (idx, item)ที่นี่ ดีที่จะไป


11
คำถามคือเกี่ยวกับรายการดัชนี เนื่องจากพวกเขาเริ่มจาก 0 มีจุดเล็ก ๆ ในการเริ่มจากตัวเลขอื่นเพราะดัชนีจะผิด (ใช่ OP บอกว่ามันผิดในคำถามด้วย) มิฉะนั้นการเรียกตัวแปรที่เป็นindex, itemเพียงแค่indexทำให้เข้าใจผิดมากตามที่คุณบันทึกไว้ for index, item in enumerate(ints)ใช้เพียงแค่
Antti Haapala

1
ดีกว่าคือการใส่ดัชนีไว้ในวงเล็บคู่เป็น (ดัชนี) มันจะทำงานได้ทั้งบน Python เวอร์ชัน 2 และ 3
hygull

1
@AnttiHaapala เหตุผลที่ฉันเข้าใจคือว่าผลลัพธ์ที่คาดหวังของคำถามเริ่มต้นที่ดัชนี 1 แทน 0
pushkin

90
for i in range(len(ints)):
   print i, ints[i]

10
นั่นน่าจะเป็นxrangepre-3.0
Ben Blank

43
ใช้แจกแจงแทน
saulspatz

3
สำหรับ Python 2.3 ด้านบนให้ใช้ฟังก์ชั่นแจกแจงในตัวเนื่องจากเป็น Pythonic มากกว่า
januarvs

การแจกแจงไม่ได้ดีกว่าเสมอไป - ขึ้นอยู่กับข้อกำหนดของแอปพลิเคชัน ในสถานการณ์ปัจจุบันของฉันความสัมพันธ์ระหว่างความยาววัตถุมีความหมายกับแอปพลิเคชันของฉัน แม้ว่าฉันจะเริ่มใช้การแจกแจง แต่ฉันได้เปลี่ยนวิธีการนี้เพื่อหลีกเลี่ยงการเขียนตรรกะเพื่อเลือกวัตถุที่จะระบุ
2560

1
@adg ฉันไม่เห็นวิธีหลีกเลี่ยงการenumerateบันทึกตรรกะใด ๆ คุณยังต้องเลือกวัตถุที่จะจัดทำดัชนีด้วยiไม่?
chepner

47

ในฐานะที่เป็นบรรทัดฐานใน Python มีหลายวิธีในการทำเช่นนี้ ในตัวอย่างทั้งหมดถือว่า:lst = [1, 2, 3, 4, 5]

1. การใช้แจกแจง ( ถือว่าเป็นสำนวนที่สุด )

for index, element in enumerate(lst):
    # do the things that need doing here

นี่เป็นตัวเลือกที่ปลอดภัยที่สุดในความคิดของฉันเพราะโอกาสในการเรียกซ้ำแบบไม่สิ้นสุดได้ถูกกำจัดไปแล้ว ทั้งไอเท็มและดัชนีถูกเก็บในตัวแปรและไม่จำเป็นต้องเขียนโค้ดเพิ่มเติมเพื่อเข้าถึงไอเท็ม

2. การสร้างตัวแปรเพื่อเก็บดัชนี ( โดยใช้for )

for index in range(len(lst)):   # or xrange
    # you will have to write extra code to get the element

3. การสร้างตัวแปรเพื่อเก็บดัชนี ( โดยใช้while )

index = 0
while index < len(lst):
    # you will have to write extra code to get the element
    index += 1  # escape infinite recursion

4. มีวิธีอื่นเสมอ

ดังที่อธิบายไว้ก่อนหน้านี้มีวิธีอื่นในการทำเช่นนี้ซึ่งไม่ได้อธิบายไว้ที่นี่และพวกเขาอาจนำไปใช้เพิ่มเติมในสถานการณ์อื่น ๆ เช่นใช้itertools.chainกับสำหรับ มันจัดการลูปซ้อนกันดีกว่าตัวอย่างอื่น ๆ


30

วิธีแบบเก่า:

for ix in range(len(ints)):
    print ints[ix]

รายการความเข้าใจ:

[ (ix, ints[ix]) for ix in range(len(ints))]

>>> ints
[1, 2, 3, 4, 5]
>>> for ix in range(len(ints)): print ints[ix]
... 
1
2
3
4
5
>>> [ (ix, ints[ix]) for ix in range(len(ints))]
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]
>>> lc = [ (ix, ints[ix]) for ix in range(len(ints))]
>>> for tup in lc:
...     print tup
... 
(0, 1)
(1, 2)
(2, 3)
(3, 4)
(4, 5)
>>> 

3
นี่คือไม่ผิดและถูกนำมาใช้ใน C / C ++ และอื่น ๆ มันถือเป็นแบบไม่ pythonic แต่ยังสามารถใช้ในหลาม เช่นเดียวกับวิธีแก้ปัญหาง่ายๆที่ทำลายลงไปยังแหล่งข้อมูล: +
Valor Naram

บางหลามสุดโต่งจะบอกว่าไม่ทำเช่นนี้ แต่ฉันบอกเพียงเพื่อระบุว่ามีวิธีที่เป็นไปได้มากกว่าหนึ่งวิธี
Valor Naram

21

วิธีที่เร็วที่สุดในการเข้าถึงดัชนีของรายการภายในลูปในPython 2.7คือการใช้วิธีช่วงสำหรับรายการขนาดเล็กและวิธีการแจกแจงสำหรับรายการขนาดกลางและขนาดใหญ่

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

from timeit import timeit

# Using range
def range_loop(iterable):
    for i in range(len(iterable)):
        1 + iterable[i]

# Using xrange
def xrange_loop(iterable):
    for i in xrange(len(iterable)):
        1 + iterable[i]

# Using enumerate
def enumerate_loop(iterable):
    for i, val in enumerate(iterable):
        1 + val

# Manual indexing
def manual_indexing_loop(iterable):
    index = 0
    for item in iterable:
        1 + item
        index += 1

ดูตัวชี้วัดประสิทธิภาพสำหรับแต่ละวิธีด้านล่าง:

from timeit import timeit

def measure(l, number=10000):
print "Measure speed for list with %d items" % len(l)
print "xrange: ", timeit(lambda :xrange_loop(l), number=number)
print "range: ", timeit(lambda :range_loop(l), number=number)
print "enumerate: ", timeit(lambda :enumerate_loop(l), number=number)
print "manual_indexing: ", timeit(lambda :manual_indexing_loop(l), number=number)

measure(range(1000))
# Measure speed for list with 1000 items
# xrange:  0.758321046829
# range:  0.701184988022
# enumerate:  0.724966049194
# manual_indexing:  0.894635915756

measure(range(10000))
# Measure speed for list with 100000 items
# xrange:  81.4756360054
# range:  75.0172479153
# enumerate:  74.687623024
# manual_indexing:  91.6308541298

measure(range(10000000), number=100)
# Measure speed for list with 10000000 items
# xrange:  82.267786026
# range:  84.0493988991
# enumerate:  78.0344707966
# manual_indexing:  95.0491430759

ด้วยเหตุนี้rangeวิธีการใช้จึงเป็นรายการที่เร็วที่สุดที่มี 1,000 รายการ สำหรับรายการที่มีขนาด> 10,000 รายการenumerateเป็นผู้ชนะ

เพิ่มลิงค์ที่มีประโยชน์ด้านล่าง:


5
"จำนวนที่อ่านได้" ความแตกต่างของความเร็วในช่วง <1000 ที่น้อยนั้นไม่มีนัยสำคัญ จะช้าลง 3% สำหรับเมตริกเวลาขนาดเล็กที่มีอยู่แล้ว

วิธีอัปเดตคำตอบเป็น Python 3
Georgy

14

ก่อนอื่นดัชนีจะมาจาก 0 ถึง 4 ภาษาการเขียนโปรแกรมเริ่มนับจาก 0; อย่าลืมว่าไม่เช่นนั้นคุณจะเจอข้อยกเว้นดัชนี สิ่งที่คุณต้องการใน for for loop คือการนับตัวแปรตั้งแต่ 0 ถึง 4 ดังนี้:

for x in range(0, 5):

โปรดทราบว่าฉันเขียน 0 ถึง 5 เนื่องจากการวนซ้ำจะหยุดหนึ่งหมายเลขก่อนค่าสูงสุด :)

เพื่อรับค่าของดัชนีใช้

list[index]

13

นี่คือสิ่งที่คุณจะได้รับเมื่อคุณเข้าถึงดัชนีในforลูป:

for i in enumerate(items): print(i)

items = [8, 23, 45, 12, 78]

for i in enumerate(items):
    print("index/value", i)

ผลลัพธ์:

# index/value (0, 8)
# index/value (1, 23)
# index/value (2, 45)
# index/value (3, 12)
# index/value (4, 78)

for i, val in enumerate(items): print(i, val)

items = [8, 23, 45, 12, 78]

for i, val in enumerate(items):
    print("index", i, "for value", val)

ผลลัพธ์:

# index 0 for value 8
# index 1 for value 23
# index 2 for value 45
# index 3 for value 12
# index 4 for value 78

for i, val in enumerate(items): print(i)

items = [8, 23, 45, 12, 78]

for i, val in enumerate(items):
    print("index", i)

ผลลัพธ์:

# index 0
# index 1
# index 2
# index 3
# index 4

12

ตามการสนทนานี้: http://bytes.com/topic/python/answers/464012-objects-list-index

วนซ้ำเคาน์เตอร์

สำนวนปัจจุบันสำหรับการวนรอบดัชนีใช้ประโยชน์จากrangeฟังก์ชั่นในตัว:

for i in range(len(sequence)):
    # work with index i

การวนซ้ำทั้งองค์ประกอบและดัชนีสามารถทำได้โดยใช้สำนวนเก่าหรือโดยใช้zipฟังก์ชันในตัวใหม่:

for i in range(len(sequence)):
    e = sequence[i]
    # work with index i and element e

หรือ

for i, e in zip(range(len(sequence)), sequence):
    # work with index i and element e

ผ่านhttp://www.python.org/dev/peps/pep-0212/


22
สิ่งนี้จะไม่ทำงานสำหรับการวนซ้ำผ่านตัวกำเนิด เพียงใช้การแจกแจง ()
Tadeck

ทุกวันนี้สำนวนในปัจจุบันนั้นแจกแจงไม่ใช่การเรียกช่วง
TankorSmash

และมันก็เหมือนกับคำตอบเก่ากว่า: stackoverflow.com/a/522576/6451573
Jean-François Fabre

11

คุณสามารถทำได้ด้วยรหัสนี้:

ints = [8, 23, 45, 12, 78]
index = 0

for value in (ints):
    index +=1
    print index, value

ใช้รหัสนี้หากคุณต้องการรีเซ็ตค่าดัชนีที่ส่วนท้ายของลูป:

ints = [8, 23, 45, 12, 78]
index = 0

for value in (ints):
    index +=1
    print index, value
    if index >= len(ints)-1:
        index = 0

10

ทางออกที่ดีที่สุดสำหรับปัญหานี้คือใช้ฟังก์ชั่นระบุในหลาม
แจกแจงผลตอบแทนtuple
ค่าแรกคือดัชนี
ที่สองคือองค์ประกอบของอาร์เรย์ที่ดัชนีนั้น

In [1]: ints = [8, 23, 45, 12, 78]

In [2]: for idx, val in enumerate(ints):
   ...:         print(idx, val)
   ...:     
(0, 8)
(1, 23)
(2, 45)
(3, 12)
(4, 78)

9

ในคำถามของคุณคุณเขียน"ฉันจะเข้าถึงดัชนีลูปจาก 1 ถึง 5 ในกรณีนี้ได้อย่างไร"

อย่างไรก็ตามดัชนีสำหรับรายการนั้นเริ่มจากศูนย์ ดังนั้นเราจำเป็นต้องทราบว่าสิ่งที่คุณต้องการจริง ๆ คือดัชนีและรายการสำหรับแต่ละรายการในรายการหรือไม่ว่าคุณต้องการให้ตัวเลขเริ่มต้นจาก 1 โชคดีใน Python มันง่ายที่จะทำอย่างใดอย่างหนึ่งหรือทั้งสองอย่าง

ก่อนอื่นเพื่อชี้แจงenumerateฟังก์ชั่นจะส่งคืนดัชนีและรายการที่เกี่ยวข้องสำหรับแต่ละรายการในรายการ

alist = [1, 2, 3, 4, 5]

for n, a in enumerate(alist):
    print("%d %d" % (n, a))

ผลลัพธ์สำหรับข้างต้นนั้นคือ

0 1
1 2
2 3
3 4
4 5

ขอให้สังเกตว่าดัชนีทำงานจาก 0 การจัดทำดัชนีชนิดนี้เป็นเรื่องปกติของภาษาโปรแกรมสมัยใหม่รวมถึง Python และ C

ถ้าคุณต้องการวนรอบส่วนของรายการคุณสามารถใช้ไวยากรณ์ Python มาตรฐานสำหรับส่วนของรายการ ตัวอย่างเช่นในการวนซ้ำจากรายการที่สองในรายการจนถึง แต่ไม่รวมถึงรายการสุดท้ายคุณสามารถใช้

for n, a in enumerate(alist[1:-1]):
    print("%d %d" % (n, a))

โปรดทราบว่าอีกครั้งดัชนีผลลัพธ์จะเริ่มจาก 0

0 2
1 3
2 4

ที่จะนำเราไปสวิทช์สำหรับstart=n enumerate()นี่เป็นการชดเชยดัชนีคุณสามารถเพิ่มจำนวนลงในดัชนีภายในลูปได้อย่างเท่าเทียมกัน

for n, a in enumerate(alist, start=1):
    print("%d %d" % (n, a))

ซึ่งเป็นผลลัพธ์

1 1
2 2
3 3
4 4
5 5

9

ถ้าฉันจะย้ำnums = [1, 2, 3, 4, 5]ฉันจะทำ

for i, num in enumerate(nums, start=1):
    print(i, num)

หรือรับความยาวเป็น l = len(nums)

for i in range(l):
    print(i+1, nums[i])

7

หากไม่มีค่าซ้ำในรายการ:

for i in ints:
    indx = ints.index(i)
    print(i, indx)

1
โปรดทราบว่าไม่ควรใช้ตัวเลือกแรกเนื่องจากจะทำงานได้อย่างถูกต้องเฉพาะเมื่อแต่ละรายการในลำดับนั้นไม่ซ้ำกัน
Stam Kaly

2
ตัวเลือกแรกคือ O (n²) เป็นความคิดที่แย่มาก หากรายการของคุณมี 1,000 องค์ประกอบมันจะใช้เวลานานกว่า 1,000 เท่าโดยenumerateแท้จริง คุณควรลบคำตอบนี้
บอริส

5

คุณสามารถลองสิ่งนี้:

data = ['itemA.ABC', 'itemB.defg', 'itemC.drug', 'itemD.ashok']
x = []
for (i, item) in enumerate(data):
      a = (i, str(item).split('.'))
      x.append(a)
for index, value in x:
     print(index, value)

ผลลัพธ์คือ

0 ['itemA', 'ABC']
1 ['itemB', 'defg']
2 ['itemC', 'drug']
3 ['itemD', 'ashok']

3

คุณสามารถใช้indexวิธีการ

ints = [8, 23, 45, 12, 78]
inds = [ints.index(i) for i in ints]

แก้ไข เน้นในความคิดเห็นว่าวิธีนี้ไม่ทำงานหากมีการซ้ำกันintsวิธีการด้านล่างควรทำงานสำหรับค่าใด ๆ ในints:

ints = [8, 8, 8, 23, 45, 12, 78]
inds = [tup[0] for tup in enumerate(ints)]

หรืออีกวิธีหนึ่ง

ints = [8, 8, 8, 23, 45, 12, 78]
inds = [tup for tup in enumerate(ints)]

หากคุณต้องการรับทั้งดัชนีและค่าintsเป็นรายการของ tuples

มันใช้วิธีการenumerateในคำตอบที่เลือกสำหรับคำถามนี้ แต่ด้วยความเข้าใจในรายการทำให้เร็วขึ้นด้วยรหัสน้อย


2

คำตอบง่ายๆที่ใช้ในขณะที่ Loop:

arr = [8, 23, 45, 12, 78]
i = 0
while i<len(arr):
    print("Item ",i+1," = ",arr[i])
    i +=1

เอาท์พุท:

ป้อนคำอธิบายรูปภาพที่นี่


1

ในการพิมพ์ tuple ของ (index, value) ใน list comprehension โดยใช้forloop:

ints = [8, 23, 45, 12, 78]
print [(i,ints[i]) for i in range(len(ints))]

เอาท์พุท:

[(0, 8), (1, 23), (2, 45), (3, 12), (4, 78)]

1

สิ่งนี้มีจุดประสงค์ที่ดีพอ:

list1 = [10, 'sumit', 43.21, 'kumar', '43', 'test', 3]
for x in list1:
    print('index:', list1.index(x), 'value:', x)

4
สิ่งนี้จะพังถ้ามีองค์ประกอบที่ซ้ำกันในรายการเช่นเดียวกับที่index()จะค้นหาการเกิดขึ้นครั้งแรกxโดยไม่กล่าวถึงเวลา O ( n ^ 2 ) ที่ต้องการเพื่อค้นหาแต่ละองค์ประกอบ
Peter Szoldan

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