2011-01-20 50 views
10

Về cơ bản tôi muốn có thể biết khi nào tôi đang ở trên mục thứ N trong vòng lặp lặp lại. Bất kỳ suy nghĩ nào?Xác định vòng lặp nào bạn đang sử dụng trong một vòng lặp trong python

d = {1:2, 3:4, 5:6, 7:8, 9:0} 

for x in d: 
    if last item: # <-- this line is psuedo code 
     print "last item :", x 
    else: 
     print x 
+2

Như đã đề cập dưới đây, từ điển không có "các mục cuối cùng" bởi vì thứ tự của chúng có phần tùy ý. Vì vậy, câu hỏi của bạn, cách nó hiện đang được viết, là một chút khó hiểu. Đúng là bạn có thể sử dụng 'for x in d:' để lặp qua các khóa, nhưng các khóa đó không phải lúc nào cũng được sắp xếp theo các cách hữu ích. – eksortso

+0

Đây là giải pháp gợi ý xử lý mục đầu tiên thay vì mục cuối cùng nếu có thể và cung cấp một cách dễ dàng để phát hiện điều đó .. http://stackoverflow.com/a/1630350/804616 – trss

Trả lời

28

Sử dụng enumerate:

#!/usr/bin/env python 

d = {1:2, 3:4, 5:6, 7:8, 9:0} 

# If you want an ordered dictionary (and have python 2.7/3.2), 
# uncomment the next lines: 

# from collections import OrderedDict 
# d = OrderedDict(sorted(d.items(), key=lambda t: t[0])) 

last = len(d) - 1 

for i, x in enumerate(d): 
    if i == last: 
     print i, x, 'last' 
    else: 
     print i, x 

# Output: 
# 0 1 
# 1 3 
# 2 9 
# 3 5 
# 4 7 last 
+0

@ MYYN: Cảm ơn bạn. Tôi nghĩ tôi chưa làm gì cả. Đó là lý do tại sao tôi không bao giờ nhìn thấy một phác thảo hộp kiểm. Tôi không hiểu phác thảo hộp kiểm là gì, nhân tiện. Tôi sẽ hiểu sau. – eyquem

+0

@MYYN không nhận được quần lót của bạn trong một twist. – NorthIsUp

+0

Loại lộn xộn so với những gì tôi mong đợi python để có thể làm, nhưng không phải lỗi của bạn và đây là giải pháp thanh lịch nhất tôi có thể tìm thấy. Cảm ơn :) – 2rs2ts

3

Làm thế nào về việc sử dụng enumerate?

>>> d = {1:2, 3:4, 5:6, 7:8, 9:0} 
>>> for i, v in enumerate(d): 
...  print i, v    # i is the index 
... 
0 1 
1 3 
2 9 
3 5 
4 7 
2
for x in d.keys()[:-1]: 
    print x 
if d: print "last item:", d.keys()[-1] 
+0

'cho x trong d [: - 1]:' đưa ra một 'TypeError: loại không thể khởi động' khi' d = {1: 2, 3: 4, 5: 6, 7: 8, 9: 0} ' vì các giá trị của từ điển 'd' là số nguyên. – martineau

+0

@martineau, hãy thử 'for x in d.keys() [: - 1]' tại đây thay thế. @Apalala đang lặp qua các khóa trong 'd', không phải' d'. Thực tế là các giá trị 'd' là số nguyên không liên quan ở đây. – eksortso

+0

@eksorto Tôi đã quản lý để xuất bản một phiên bản không có '.keys()' trong vài phút. @martineau phải đã thấy điều đó. – Apalala

0
d = {1:2, 3:4, 5:6, 7:8, 9:0} 

for i,x in enumerate(d): 
    print "last item :"+repr(x) if i+1==len(d) else x 

Nhưng mục cuối cùng của một cuốn từ điển có thứ tự không có nghĩa là bất cứ điều gì

0
list = [1,2,3] 

last = list[-1] 

for i in list: 
    if i == last: 
     print("Last:") 
    print i 

Output:

1 
2 
Last: 
3 
Các vấn đề liên quan