Python 列表迭代算法
我最近开始编写Python代码,并决定编写一个简短的程序。一年前我参加了一次历史考试,考试的第一项任务是按时间顺序排列三件事。我想用一个程序重新创建这个任务,该程序将这些事件随机化,这样它就有可能生成数千个这样的独特任务(在实际的程序中不应该看到年份): 1.铜暴动(1662年) 2.库利科沃战役(1380年) 3.第一次十字军东征(1096年) 我设法做到了。但每项任务都有答案。它存储在一个名为“年份”的列表中。还有另一个列表,叫做syears,它按时间顺序排序Python 列表迭代算法,python,python-3.x,Python,Python 3.x,我最近开始编写Python代码,并决定编写一个简短的程序。一年前我参加了一次历史考试,考试的第一项任务是按时间顺序排列三件事。我想用一个程序重新创建这个任务,该程序将这些事件随机化,这样它就有可能生成数千个这样的独特任务(在实际的程序中不应该看到年份): 1.铜暴动(1662年) 2.库利科沃战役(1380年) 3.第一次十字军东征(1096年) 我设法做到了。但每项任务都有答案。它存储在一个名为“年份”的列表中。还有另一个列表,叫做syears,它按时间顺序排序 years = [1662,
years = [1662, 1497, 1096]
syears = [1096, 1497, 1662]
有一个名为answer的变量,它应该存储正确的答案。
正确答案是:321
但是我对一个程序得到正确答案有一个问题,我决定强行执行它:
answer = 0
if years[0] == syears[0]:
# answer = '1'
if years[1] == syears[1]:
# answer = '12'
if years[2] == syears[2]:
answer = '123'
else:
answer = '132'
elif years[1] == syears[1]:
# answer = '2'
if years[0] == syears[0]:
# answer = '21'
if years[2] == syears[2]:
answer = '213'
else:
answer = '231'
And so on...
但是,它不起作用。此外,我怀疑这是一个糟糕的编码。使用这两个列表获得正确答案的合理选择是什么?谢谢你的帮助 使用列表的
索引方法
[years.index(value) + 1 for value in syears]
查找每个元素的索引最好在循环中完成,如下所示:
answer = []
for syear in syears:
idx = years.index(syear)
answer.append(idx)
(此处的索引将以零为基础。如果希望以一为基础,请为每个索引添加1)
当然,有很多其他的方法来做你在这里尝试做的事情。包括这样一个单行列表理解,它完全避免了syears
的需要:
answer = [idx for idx, elem in sorted(enumerate(years), key=lambda x: x[1])]
这只是不用syears的另一种方式
p = sorted(range(1,len(years)+1), key=lambda k: years[k-1])
print("".join([str(i) for i in p]))
#### Output ####
321
这样,您将始终拥有不同的顺序:
from random import shuffle
def gimmeThreeEvents():
events = [
["Copper Riot", 1662],
["The Battle of Kulikovo",1380],
["The First Crusade",1096]
]
shuffle(events)
order = [x[1] for x in events]
sort = sorted(order)
print(order)
print(sort)
print("Order this events:")
for e in events:
print("- " + str(e[0]))
print("Solutions:")
sol = []
for dates in order:
sol.append(sort.index(dates) + 1)
print(sol)
return events
gimmeThreeEvents()
输出:
Order this events:
- The Battle of Kulikovo
- Copper Riot
- The First Crusade
Solutions:
[2, 3, 1]
[Finished in 0.1s]