我有 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')
