在python中的单个列表上使用多个变量(for循环)[重复]

Posted

技术标签:

【中文标题】在python中的单个列表上使用多个变量(for循环)[重复]【英文标题】:Using multiple variables over a single list in python (for loop) [duplicate] 【发布时间】:2019-11-02 01:22:54 【问题描述】:

我正在编写一个 python 脚本,它需要从 for 循环中的列表中读取值并对其执行一些操作。目前它看起来像这样:

for i in someList:
    # do some operation here

现在,这个特定的操作需要几个小时才能完成,所以我想做的是使用多线程/子进程并并行处理多个项目。那么有没有一种方法可以运行 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]

【问题讨论】:

为什么不使用while 并手动增加索引? 如果someList 是一个带有列表的列表,你只能做for i,j,k in someList: 除非做某事操作不清楚,这样做或单元素处理都没关系。 @prashantrana 做某事是一个函数调用,我想使用多处理并行运行。我不明白这与这个问题有什么关系。您可以将其视为 print(i)、print(j)、print(k) 操作。 @KhizarAmin,您不需要将其拆分为组以使用多处理 【参考方案1】:

我们可以编写我们的自定义迭代 n_list 类,该类可用于跳跃(默认 hop = 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 循环中的多个打印输出值存储到列表或变量中

使用 for 循环(python)更改列表中的值

SHELL脚本进阶

Python中对于多个for循环和变量的列表理解

列表如何在 python 中使用 for 循环实际工作?

防止 Python For 循环通过 char 遍历单个字符串