我不想單獨使用 3 個回圈,而是只想使用一個回圈并加快代碼速度。
有 3 種不同的模式range(0,150),每個回圈增加 3 種模式:
0,3,6,9...
1,4,7,10...
2,5,8,11....
我的代碼:
fromlist = [1,2,3,4,5]
req1list = ['z','t','y']
req2list = [21,39,52]
req3list = [100,200,300]
for i in range(0,150,3):
req1list.append(fromlist[i])
for j in range(1,150,3):
req2list.append(fromlist[j])
for x in range(2,151,3):
req3list.append(fromlist[x])
請注意,串列已經創建并且檔案中有資料。因此,我認為串列理解是不可能的。
另一個注意事項:請忽略串列長度,在我的檔案中,串列要長得多并且不會導致[].
有什么方法可以將這 3 個回圈合二為一,并加快代碼速度?
uj5u.com熱心網友回復:
與其嘗試在每次迭代中(在一個回圈中)執行三個追加,不如呼叫extend而不是呼叫append. 您還可以使用切片來避免理解:
req1list.extend(fromlist[::3])
req2list.extend(fromlist[1::3])
req3list.extend(fromlist[2::3])
如果在 150 處停止很重要,請將其添加到切片操作中:
req1list.extend(fromlist[:150:3])
# ...etc
uj5u.com熱心網友回復:
一種略有不同的方法是使用檔案grouper中定義的函式。itertools
def grouper(iterable, n, *, incomplete='fill', fillvalue=None):
args = [iter(iterable)] * n
if incomplete == 'fill':
return zip_longest(*args, fillvalue=fillvalue)
if incomplete == 'strict':
return zip(*args, strict=True)
if incomplete == 'ignore':
return zip(*args)
else:
raise ValueError('Expected fill, strict, or ignore')
有了這個,你可以寫
for x, y, z in grouper(fromlist, 3):
req1list.append(x)
req2list.append(y)
req3list.append(z)
(您可以將檔案中的定義復制grouper到您自己的代碼中,或者使用包含它的第三方more-itertools包以及更多用于處理迭代器的有用函式。)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/537542.html
標籤:Python循环范围
