在 python 中的单个列表上使用多个变量(for 循环)
Using multiple variables over a single list in python (for loop)
我正在编写一个 python 脚本,它需要从 for 循环中的列表中读取值并对其执行一些操作。目前看起来像这样:
for i in someList:
# do some operation here
现在,这个特定的操作需要几个小时才能完成,所以我想做的是使用 multi-threading/sub-processes 并并行处理多个项目。那么有没有一种方法可以 运行 for 循环,例如:
for i,j,k in someList:
#do some operation here
我知道此语法可用于同时遍历多个列表,但我希望能够使用同一列表的多个项目。我想从循环中得到的是 i、j 和 k 的值按以下方式更新:
i = someList[1], j = someList[2], k = someList[3]
在下一次迭代中:
i = someList[4], j = someList[5], k = someList[6]
我们可以编写自定义迭代 n_list class 可用于跳跃(默认跳跃 = 1,与普通列表一样)迭代:
class n_list:
def __init__(self, lst, n=1):
self.n = n
self.lst = lst
self.index = 0
def __iter__(self):
return self
def __next__(self):
l = self.lst[self.index:self.index+self.n:]
if len(l) == 0:
raise StopIteration
self.index += self.n
# 5 * [None] -> [None,None,None,None,None]
# ([1,2,3] + 5 * [None]) -> [1,2,3,None,None,None,None,None]
# ([1,2,3] + 5 * [None])[:5] -> [1,2,3,None,None]
# tuple([1,2,3,None,None]) -> (1,2,3,None,None)
return tuple((l + self.n * [None])[:self.n])
测试我们的 n_list,元组大小为 3:
test_list = [10, 20, 30, 40, 50, 60, 70, 80]
for a, b, c in n_list(test_list, 3):
print('a: ' + str(a) + ', b: ' + str(b) + ', c: ' + str(c))
输出:
a: 10, b: 20, c: 30
a: 40, b: 50, c: 60
a: 70, b: 80, c: None
我正在编写一个 python 脚本,它需要从 for 循环中的列表中读取值并对其执行一些操作。目前看起来像这样:
for i in someList:
# do some operation here
现在,这个特定的操作需要几个小时才能完成,所以我想做的是使用 multi-threading/sub-processes 并并行处理多个项目。那么有没有一种方法可以 运行 for 循环,例如:
for i,j,k in someList:
#do some operation here
我知道此语法可用于同时遍历多个列表,但我希望能够使用同一列表的多个项目。我想从循环中得到的是 i、j 和 k 的值按以下方式更新:
i = someList[1], j = someList[2], k = someList[3]
在下一次迭代中:
i = someList[4], j = someList[5], k = someList[6]
我们可以编写自定义迭代 n_list class 可用于跳跃(默认跳跃 = 1,与普通列表一样)迭代:
class n_list:
def __init__(self, lst, n=1):
self.n = n
self.lst = lst
self.index = 0
def __iter__(self):
return self
def __next__(self):
l = self.lst[self.index:self.index+self.n:]
if len(l) == 0:
raise StopIteration
self.index += self.n
# 5 * [None] -> [None,None,None,None,None]
# ([1,2,3] + 5 * [None]) -> [1,2,3,None,None,None,None,None]
# ([1,2,3] + 5 * [None])[:5] -> [1,2,3,None,None]
# tuple([1,2,3,None,None]) -> (1,2,3,None,None)
return tuple((l + self.n * [None])[:self.n])
测试我们的 n_list,元组大小为 3:
test_list = [10, 20, 30, 40, 50, 60, 70, 80]
for a, b, c in n_list(test_list, 3):
print('a: ' + str(a) + ', b: ' + str(b) + ', c: ' + str(c))
输出:
a: 10, b: 20, c: 30
a: 40, b: 50, c: 60
a: 70, b: 80, c: None