Skip to main content
 首页 » 编程设计

python之访问 zip 中的数据之索引超出范围之Python

2025年05月04日22rubylouvre

我有 3 个列表:

Names=["Jack","Jeni","Monsa","Mehus","Kuis","Tim","Tony","Yestgf","Pere"] 
Years=[17,20,26,40,67,88,96,99,37] 
Order=[1,2,3,4,5,6,7,8,9] 

我正在尝试使用 Order 列表中的顺序从 Names 列表中提取名称,它从 Jack Jack 开始,第二组从 Jeni Jeni 开始(它不是此处重复条目,只是为了表明条目从它自己开始)

Jack Jack 
Jack Jeni 
Jack Monsa 
Jack Mehus 
Jack Kuis 
Jack Tim 
Jack Tony 
Jack Yestgf 
Jack Pere 
Jeni Jeni 
Jeni Monsa 
Jeni Mehus 
Jeni Kuis 
Jeni Tim 
Jeni Tony 
Jeni Yestgf 
Jeni Pere 
Jeni Jack  

我写的代码是这样的:

Names=["Jack","Jeni","Monsa","Mehus","Kuis","Tim","Tony","Yestgf","Pere"] 
Years=[17,20,26,40,67,88,96,99,37] 
Order=[1,2,3,4,5,6,7,8,9] 
for names,years,orders in zip(Names,Years,Order): 
   for i in range(1,(len(Order)+1)): 
       for j in range(i,i+len(Order)): 
           jdisplay = Names[j % len(Order)] if (j % len(Order)) else Names[j] 
           print(names,Names[j]) 

我收到以下错误:

Traceback (most recent call last): 
Jack Jeni 
File "C:/Users/Administrator/PycharmProjects/Tesrt/forumsquestion.py", line 7, in <module> 
Jack Monsa 
Jack Mehus 
Jack Kuis 
Jack Tim 
Jack Tony 
Jack Yestgf 
Jack Pere 
jdisplay = Names[j % len(Order)] if (j % len(Order)) else Names[j] 
IndexError: list index out of range 
 
Process finished with exit code 1 

我迷路了,这是从压缩列表中提取数据的正确方法吗?

更新: William Feirie 给出的代码运行良好,但是第 4 级条目似乎变得很奇怪

Names=["Jack","Jeni","Monsa","Mehus","Kuis","Tim","Tony","Yestgf","Pere"] 
Years=[17,20,26,40,67,88,96,99,37] 
Order=[1,2,3,4,5,6,7,8,9] 
print(len(Names),len(Years),len(Order)) 
for idx,name in enumerate(Names): 
    for idx in range(idx,idx+len(Names)): 
        for idy in range(idx,idx+len(Names)): 
            for idz in range(idx,idx+len(Names)): 
                print(name,Names[idx%len(Names)],Names[idy%len(Names)],Names[idz%len(Names)]) 

输出:

Jack Jack Jack Jack 
Jack Jack Jack Jeni 
Jack Jack Jack Monsa 
Jack Jack Jack Mehus 
Jack Jack Jack Kuis 
Jack Jack Jack Tim 
Jack Jack Jack Tony 
Jack Jack Jack Yestgf 
Jack Jack Jack Pere 
Jack Jack **Jeni Jack** 
Jack Jack **Jeni Jeni** 

最后两行应该是

Jack Jack Jeni Jeni 
Jack Jack Jeni Jack 

但情况有所不同,从那以后一直持续到最后,代码中是否缺少任何内容?

请您参考如下方法:

你能不能只用itertools.combinations_with_replacement() ?

代码:

Names = ["Jack", "Jeni", "Monsa", "Mehus", "Kuis", "Tim", "Tony", "Yestgf", 
         "Pere"] 
Years = [17, 20, 26, 40, 67, 88, 96, 99, 37] 
Order = [1, 2, 3, 4, 5, 6, 7, 8, 9] 
 
import itertools as it 
for i in it.combinations_with_replacement(Names, 2): 
    print(i) 

结果:

('Jack', 'Jack') 
('Jack', 'Jeni') 
('Jack', 'Monsa') 
('Jack', 'Mehus') 
('Jack', 'Kuis') 
('Jack', 'Tim') 
('Jack', 'Tony') 
('Jack', 'Yestgf') 
('Jack', 'Pere') 
('Jeni', 'Jeni') 
('Jeni', 'Monsa') 
('Jeni', 'Mehus') 
('Jeni', 'Kuis') 
('Jeni', 'Tim') 
('Jeni', 'Tony') 
('Jeni', 'Yestgf') 
('Jeni', 'Pere') 
('Monsa', 'Monsa') 
('Monsa', 'Mehus') 
('Monsa', 'Kuis') 
('Monsa', 'Tim') 
('Monsa', 'Tony') 
('Monsa', 'Yestgf') 
('Monsa', 'Pere') 
('Mehus', 'Mehus') 
('Mehus', 'Kuis') 
('Mehus', 'Tim') 
('Mehus', 'Tony') 
('Mehus', 'Yestgf') 
('Mehus', 'Pere') 
('Kuis', 'Kuis') 
('Kuis', 'Tim') 
('Kuis', 'Tony') 
('Kuis', 'Yestgf') 
('Kuis', 'Pere') 
('Tim', 'Tim') 
('Tim', 'Tony') 
('Tim', 'Yestgf') 
('Tim', 'Pere') 
('Tony', 'Tony') 
('Tony', 'Yestgf') 
('Tony', 'Pere') 
('Yestgf', 'Yestgf') 
('Yestgf', 'Pere') 
('Pere', 'Pere')