列表迭代算法

2024-05-22 09:37:22 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近开始编写Python代码,并决定编写一个简短的程序。一年前我参加了一次历史考试,考试的第一项任务是按时间顺序排列三件事。我想用一个程序来重新创建这个任务,这个程序将这些事件随机化,这样它就有可能生成成千上万个这样的独特任务(在实际的程序中不应该看到年份):

1.铜暴动(1662)

2.库利科沃战役(1380)

3.第一次十字军东征(1096年)

我设法做到了。但每项任务都有答案。它存储在一个名为年份的列表中。还有另一个列表,叫做syears,它按时间顺序排列。你知道吗

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...

但是,它不起作用。而且,我怀疑这是个糟糕的编码。使用这两个列表得到正确答案的合理选择是什么?谢谢你的帮助!你知道吗


Tags: 答案代码answer程序列表if时间事件
3条回答

只是另一种不用耳朵的方法。你知道吗

p = sorted(range(1,len(years)+1), key=lambda k: years[k-1])

print("".join([str(i) for i in p]))

#### Output ####
321

查找每个元素的索引最好在循环中完成,如下所示:

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])]

使用列表的index方法

[years.index(value) + 1 for value in syears]

相关问题 更多 >