gpt4 book ai didi

Python循环遍历2个列表

转载 作者:太空宇宙 更新时间:2023-11-04 09:03:04 24 4
gpt4 key购买 nike

我正在用 Python 编写一些几乎可以正常工作的代码,但有一件事我无法弄清楚。

我需要遍历 2 个列表。我想遍历直到第一个列表完成;而第二个列表应该重复自己,直到第一个列表完成。

我想输入一个数据库列表和一个流列表。然后我希望代码通过替换它具有“+ stream +”和“+ item +”的位置来输出 9 行。项目部分工作正常,但我不知道如何在遍历数据库列表时输出流列表。我希望流循环然后重复。所以它将从 1a 开始,然后到达 3c,然后从 1a 重新开始。我希望这种情况发生,直到它到达列表中的最后一个数据库。

databases=input("Enter databases: ")
streams="1a 2a 3a 1b 2b 3b 1c 2c 3c"
stream="1a"

db_list = databases.split()
streams_list= streams.split()

for item in db_list:
print("unlink $ORACLE_BASE/admin/" + item + "/backup")
print("unlink $ORACLE_BASE/admin/" + item + "/dpdump")
print("unlink $ORACLE_BASE/admin/" + item + "/exp")
print("mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM" + stream + "/" + item + "/backup")
print("mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM" + stream + "/" + item + "/dpdump")
print("mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM" + stream + "/" + item + "/exp")
print("ln -s $ORACLE_BASE/acfsmounts/global/STREAM" + stream + "/" + item + "/backup $ORACLE_BASE/admin/" + item + "/backup")
print("ln -s $ORACLE_BASE/acfsmounts/global/STREAM" + stream + "/" + item + "/dpdump $ORACLE_BASE/admin/" + item + "/dpdump")
print("ln -s $ORACLE_BASE/acfsmounts/global/STREAM" + stream + "/" + item + "/exp $ORACLE_BASE/admin/" + item + "/exp")

这是输出:

Enter databases: database1 database2 database3
unlink $ORACLE_BASE/admin/database1/backup
unlink $ORACLE_BASE/admin/database1/dpdump
unlink $ORACLE_BASE/admin/database1/exp
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database1/backup
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database1/dpdump
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database1/exp
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database1/backup $ORACLE_BASE/admin/database1/backup
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database1/dpdump $ORACLE_BASE/admin/database1/dpdump
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database1/exp $ORACLE_BASE/admin/database1/exp
unlink $ORACLE_BASE/admin/database2/backup
unlink $ORACLE_BASE/admin/database2/dpdump
unlink $ORACLE_BASE/admin/database2/exp
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database2/backup
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database2/dpdump
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database2/exp
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database2/backup $ORACLE_BASE/admin/database2/backup
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database2/dpdump $ORACLE_BASE/admin/database2/dpdump
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database2/exp $ORACLE_BASE/admin/database2/exp
unlink $ORACLE_BASE/admin/database3/backup
unlink $ORACLE_BASE/admin/database3/dpdump
unlink $ORACLE_BASE/admin/database3/exp
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database3/backup
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database3/dpdump
mkdir -p /oradba/app/oracle/acfsmounts/global/STREAM1a/database3/exp
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database3/backup $ORACLE_BASE/admin/database3/backup
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database3/dpdump $ORACLE_BASE/admin/database3/dpdump
ln -s $ORACLE_BASE/acfsmounts/global/STREAM1a/database3/exp $ORACLE_BASE/admin/database3/exp

我的输出每次都有 STREAM1a,但我希望它循环显示 1a、2a、3a、1b、2b、3b、1c、2c 和 3c 的模式。如前所述,如果我有 9 个以上的数据库,那么它将再次从 1a 开始。我怎样才能做到这一点?

我的代码中唯一没有按我想要的方式工作的部分是“+ stream +”。

最佳答案

你应该使用 itertools.cycle .这将允许您在无限重复的循环中获取列表的元素。在循环的开头添加此代码:

stream_cycle = itertools.cycle(streams_list)
for item in db_list:
stream = stream_cycle.next()

或者按照@HughBothwell 的建议,您可以使用 zip 并将其包含在 for 循环的定义中:

for item, stream in zip(db_list, itertools.cycle(streams_list)):

无论哪种方式都会在循环的每次迭代中为您提供下一个流。如果您的数据库多于流,那么它将重复。

关于Python循环遍历2个列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23553763/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com