2009-02-23 32 views
9

Vì vậy, tôi thấy trong another post đoạn mã "xấu" sau đây, nhưng các lựa chọn thay thế duy nhất tôi đã thấy liên quan đến việc vá lỗi Python.Thay thế cho 'for i in xrange (len (x))'

for i in xrange(len(something)): 
    workwith = something[i] 
    # do things with workwith... 

Tôi phải làm gì để tránh điều này "antipattern"?

Trả lời

22

Xem Pythonic

for workwith in something: 
    # do things with workwith 
+1

1: 80% thời gian, đây là những gì bạn có nghĩa là. –

+0

tốt, trừ khi bạn muốn sửa đổi giá trị. xem xét để làm việc với một cái gì đó: workwith + = 1 – vartec

+0

@ vartec: điều đó đúng, nhưng cho Alam câu hỏi mà anh ta không làm. – kmkaplan

0

ví dụ:

[workwith(i) for i in something] 
+0

'một cái gì đó' là một bộ sưu tập các đối tượng. Từ bản gốc, nó không xuất hiện rằng 'cái gì đó' nhất thiết là số nguyên cũng không phải 'workwith' là một bộ sưu tập nào cả. 'workwith' dường như là một biến tạm thời để làm việc với 'cái gì đó'. – hughdbrown

-3

x là gì? Nếu chuỗi hoặc chuỗi hoặc chuỗi lặp của nó sau đó là

sẽ hoạt động tốt.

+0

Câu trả lời của SilentGhost tốt hơn :-) – Xolve

+0

Tôi không thể nghĩ ra bất kỳ tình huống nào trong đó đây là câu trả lời hay nhất. Nó dường như là một phiên bản kém hơn của câu trả lời của kmkaplan. (Tôi nhận ra nó đã được đăng trước khi kmkaplan, nhưng nó * là * có thể xóa câu trả lời của một người, một khi một người cao cấp rõ ràng đã được đề xuất.) Tuy nhiên, tôi đã không đặt -1 vào nó, vì nó đã bị hạ gục đủ bởi khác. – ToolmakerSteve

23

Nếu bạn cần biết chỉ số trong cơ thể lặp:

for index, workwith in enumerate(something): 
    print "element", index, "is", workwith 
+1

+1: 20% thời gian, đây là ý của bạn. –

12

Như có twoanswers cho câu hỏi đó là hoàn toàn hợp lệ (với một giả định mỗi) và là tác giả của câu hỏi không thông báo cho chúng về số phận của chỉ số, câu trả lời hợp lệ nên đọc:

Nếu bạn do not need index tại tất cả:

for workwith in something: 
    print "element", workwith 
.210

Nếu bạn need index:

for index, workwith in enumerate(something): 
    print "element", index, "is", workwith 

Nếu câu trả lời của tôi là không thích hợp, bình luận xin vui lòng, và tôi sẽ xóa nó :)

+1

+1: Không, câu trả lời của bạn là phù hợp nhất và thực sự là hoàn chỉnh nhất. – tzot

Các vấn đề liên quan