Python中同时调用多个列表

如果你有多个列表,想要同时迭代它们,可以使用zip()函数。zip()函数可以将多个可迭代对象合并成一个元组的迭代器,然后你可以在循环中使用它。

问题背景

当需要在Python脚本中避免重复相同任务时,可以使用for循环来遍历列表。但是,如果有多个列表需要遍历,则需要逐个遍历它们,这会造成代码冗余。

例如,以下代码重复地遍历了多个列表:

python 复制代码
catlist1 = ['s0.05-k5-a1.0' , 's0.05-k5-a3.0' , 's0.05-k5-a7.0' , 's0.05-k5-a10.0' ]
catlist2 = ['s0.05-k7-a1.0' , 's0.05-k7-a3.0' , 's0.05-k7-a7.0' , 's0.05-k7-a10.0']

catlist3 = ['s0.07-k5-a1.0' , 's0.07-k5-a3.0' , 's0.07-k5-a7.0' , 's0.07-k5-a10.0' ]
catlist4 = ['s0.07-k7-a1.0' , 's0.07-k7-a3.0' , 's0.07-k7-a7.0' , 's0.07-k7-a10.0']

catlist = [catlist1 ,catlist2 ,catlist3 ,catlist4 ]

for parName in catlist1:         

    category = '/home/x/Desktop/rouge/ROUGE/Experiments/' 

    for root, subFolders, files in os.walk(category + parName):
        #i = 0 
        (head, filename) = os.path.split(root)
        print filename
        #some function that is will re

for parName in catlist2:         

    category = '/home/x/Desktop/rouge/ROUGE/Experiments/' 

    for root, subFolders, files in os.walk(category + parName):
        #i = 0 
        (head, filename) = os.path.split(root)
        print filename
        #some function that is will re

# ...

以上代码的重复性很强,不易维护。

解决方案

可以使用Python的itertools.chain.from_iterable()函数来将多个列表扁平化,然后可以使用for循环来遍历这个扁平化的列表。

python 复制代码
import itertools

catlist = [catlist1 ,catlist2 ,catlist3 ,catlist4 ]

for parName in itertools.chain.from_iterable(catlist):         

    category = '/home/x/Desktop/rouge/ROUGE/Experiments/' 

    for root, subFolders, files in os.walk(category + parName):
        #i = 0 
        (head, filename) = os.path.split(root)
        print filename
        #some function that is will re

上面的代码就可以避免重复地遍历多个列表,简化了代码,提高了代码的可维护性。

另一种方法是使用嵌套循环,如下所示:

python 复制代码
for sublist in catlist:
    for parName in sublist:
        category = '/home/x/Desktop/rouge/ROUGE/Experiments/' 

        for root, subFolders, files in os.walk(category + parName):
            #i = 0 
            (head, filename) = os.path.split(root)
            print filename
            #some function that is will re

上面的代码也可以实现同样的效果,但是在代码的可读性方面不如第一种方法。

代码例子

以下是一个使用itertools.chain.from_iterable()函数来将多个列表扁平化的代码例子:

python 复制代码
import itertools

catlist1 = ['s0.05-k5-a1.0' , 's0.05-k5-a3.0' , 's0.05-k5-a7.0' , 's0.05-k5-a10.0' ]
catlist2 = ['s0.05-k7-a1.0' , 's0.05-k7-a3.0' , 's0.05-k7-a7.0' , 's0.05-k7-a10.0']

catlist3 = ['s0.07-k5-a1.0' , 's0.07-k5-a3.0' , 's0.07-k5-a7.0' , 's0.07-k5-a10.0' ]
catlist4 = ['s0.07-k7-a1.0' , 's0.07-k7-a3.0' , 's0.07-k7-a7.0' , 's0.07-k7-a10.0']

catlist = [catlist1 ,catlist2 ,catlist3 ,catlist4 ]

for parName in itertools.chain.from_iterable(catlist):
    print(parName)

输出结果如下:

复制代码
s0.05-k5-a1.0
s0.05-k5-a3.0
s0.05-k5-a7.0
s0.05-k5-a10.0
s0.05-k7-a1.0
s0.05-k7-a3.0
s0.05-k7-a7.0
s0.05-k7-a10.0
s0.07-k5-a1.0
s0.07-k5-a3.0
s0.07-k5-a7.0
s0.07-k5-a10.0
s0.07-k7-a1.0
s0.07-k7-a3.0
s0.07-k7-a7.0
s0.07-k7-a10.0

这样,即使列表的长度不同,你也可以同时迭代它们。如果有不懂的可以留言一起讨论。

相关推荐
qq_411671982 分钟前
vue3 的模板引用ref和$parent
前端·javascript·vue.js
Gyoku Mint2 分钟前
深度学习×第4卷:Pytorch实战——她第一次用张量去拟合你的轨迹
人工智能·pytorch·python·深度学习·神经网络·算法·聚类
鸥梨菌Honevid3 分钟前
Qt自定义控件(1)——QPaintEvent
开发语言·qt
Code季风6 分钟前
深入比较 Gin 与 Beego:Go Web 框架的两大选择
开发语言·golang·go·gin·beego
清幽竹客1 小时前
vue-37(模拟依赖项进行隔离测试)
前端·vue.js
vvilkim1 小时前
Nuxt.js 页面与布局系统深度解析:构建高效 Vue 应用的关键
前端·javascript·vue.js
滿1 小时前
Vue3 父子组件表单滚动到校验错误的位置实现方法
前端·javascript·vue.js
专注VB编程开发20年1 小时前
javascript的类,ES6模块写法在VSCODE中智能提示
开发语言·javascript·vscode
夏梦春蝉2 小时前
ES6从入门到精通:模块化
前端·ecmascript·es6
拓端研究室3 小时前
视频讲解:门槛效应模型Threshold Effect分析数字金融指数与消费结构数据
前端·算法