以zip格式访问数据 - 索引超出范围 - Python

时间:2018-03-04 04:56:04

标签: python python-3.x

我有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]

我正在尝试使用Names列表中的顺序从Order列表中提取名称,它从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

但是它会有所不同,从那里开始直到最后这个仍然存在,代码中缺少什么?

2 个答案:

答案 0 :(得分:4)

你能使用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')

答案 1 :(得分:1)

你在找这样的东西吗?

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)):
        print(name,Names[idx%len(Names)])
相关问题