【问题标题】:Simplifying a short list comparison简化短名单比较
【发布时间】:2014-12-04 23:14:50
【问题描述】:

这是代码。它被用于更改存储在列表中的某个值(介于 25 到 81 个值之间),具体取决于用户输入。我使用第二个列表来决定会发生什么,里面只有 4 个值,这也是用户的输入。基本上,如果用户选择了某个值,它会依次更改为下一个值。

if list1[value] == list2[3]:
    list[value] = list2[0]
elif list1[value] == list2[0]:
    list[value] = list2[1]
elif list1[value] == list2[1]:
    list[value] = list2[2]
elif list1[value] == list2[2]:
    list[value] = list2[3]

我的问题是,我找不到使它更简单的方法。它看起来又长又丑。它还需要根据额外的输入执行多次,因此,如果用户两次选择相同的变量,则每次都会依次更改。

这似乎是一个愚蠢的问题。多年来,我一直在考虑如何将其简化为简短的 for 循环或其他东西,但由于某种原因,每次都失败了。 我尝试过这样的事情:

e = value % 4
if list1[value] == list2[e]:
    list1[value] = list2[e + 1]
#This isn't exactly what I had, but something along these lines, maybe in a for loop too etc.

列表 2 包含 4 个字符串,[color1, colour2, colour3, colour4] 列表 1 包含这些相同的字符串,但会反复循环,直到达到用户指定的列表限制。

感谢您的帮助!

【问题讨论】:

  • 列表是什么样的?
  • 列表 2 有 4 个字符串,[userColor1, userColor2, userColor3, userColor4] 列表 1 将有 25 到 81 个值,与列表 2 相同的字符串,但会反复循环直到达到最大数量价值。
  • @Jett:您能否编辑问题以添加该评论?对于未来的访问者来说,一眼就能看到会更快。 (标签列表下的edit链接)
  • @BorrajaX 没有问题,完成

标签: python loops if-statement comparison simplify


【解决方案1】:

使用{value: nextvalue} 的字典代替“循环”数据集的列表,即:

cycler = {0: 1, 1: 2, 2: 3, 3: 0} # replace 0,1,2,3 with the actual values
if list1[value] in cycler:
    list1[value] = cycler[list1[value]]

编辑:从元素列表构建循环器:

cycler = {list2[i-1]: list2[i] for i in xrange(len(list2))}
# Note that this works because `list2[-1]` indexes the last element. 

【讨论】:

  • 非常感谢,这行得通。有一件事是,在用户输入之前我不知道实际值是多少,所以它有点长。我是否只需要输入 {list2[0]: list2[1], list2[1], list2[2]} 等?如果没有办法进一步简化,那就完美了!
  • @Jett 添加代码以更方便地构建列表。
【解决方案2】:
for i in range(0, len(list2):
    if list1[value] == list2[i] :
        list1[value] = list2[(i+1)%len(list2)]

【讨论】:

    猜你喜欢
    • 2014-12-17
    • 1970-01-01
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    相关资源
    最近更新 更多