簡體   English   中英

在Python中使用2個索引變量進行迭代

[英]Iterate with 2 Indexes Variable in Python

是否有更好或更清潔的方法來實現以下結果? 我有4個條件,一半代碼填充為“ while循環”,i + = 1,j + = 1。

i = 0
j = 0
limit1 = 2
limit2 = 4

while (i < limit1 and j < limit2):
    lists.append ('First index: %d, Second index: %d' % (i, j))
    j += 1
    lists.append ('First index: %d, Second index: %d' % (i, j))
    i += 1
    j += 1

for i in lists:
    print (i)

結果:

First index: 0  Second index: 0
First index: 0  Second index: 1
First index: 1  Second index: 2
First index: 1  Second index: 3

僅從i計算j相當簡單:

for i in xrange(limit1):
    l.append('First index: %d, Second index: %d' % (i, 2*i))
    l.append('First index: %d, Second index: %d' % (i, 2*i+1))

這是假設limit2的兩倍limit1 如果並非總是如此,則可以添加其他檢查:

for i in xrange(limit1):
    if 2*i >= limit2:
        break
    l.append('First index: %d, Second index: %d' % (i, 2*i))
    l.append('First index: %d, Second index: %d' % (i, 2*i+1))

或計算預先使用的限制:

for i in xrange(min(limit1, (limit2 + 1)//2)):

盡管如您所見,極限計算可能容易出錯。

請注意,如果limit2不是2的倍數,您的代碼可能會發出j == limit2的條目:

>>> lists = []
>>> i = 0
>>> j = 0
>>> limit1 = 2
>>> limit2 = 3
>>> while (i < limit1 and j < limit2):
...     lists.append ('First index: %d, Second index: %d' % (i, j))
...     j += 1
...     lists.append ('First index: %d, Second index: %d' % (i, j))
...     i += 1
...     j += 1
...
>>> for i in lists:
...     print (i)
...
First index: 0, Second index: 0
First index: 0, Second index: 1
First index: 1, Second index: 2
First index: 1, Second index: 3

如果不希望這樣,我們可以將循環重新排列為j而不是i

for j in xrange(min(limit2, limit1*2)):
    l.append('First index: %d, Second index: %d' % (j//2, j))
lists = ['First index: %d, Second index %d' % (j//2, j) for j in range(limit2) if j//2 < limit1]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM