【问题标题】:Last Survivor - codewars最后的幸存者 - 代码战
【发布时间】:2021-08-08 20:31:52
【问题描述】:

所以这个问题来自 codewars 中的 Last Survivor kata。以下是指南和示例输入。

给你一串字母和一组数字。 数字表示必须按顺序从数组开头开始删除的字母的位置。 每次删除后,字符串的大小都会减小(没有空格)。 返回剩下的唯一一个字母。

输入应产生以下字母。 last_survivor('kbc', [0, 1]), 'b' last_survivor('zbk', [2, 1]), 'z'

我遇到的问题是带有索引 [2,1] 的“zbk”。这是我的代码。 该代码能够很好地解决所有其他问题,但是对于索引以 2 开头的问题“zbk”,它指出第 6 行中的索引列表超出范围。这段代码是否无法正确读取以弹出 new_letters[2] 然后弹出 new_letters[1],对其他人来说效果很好。

def last_survivor(letters, coords): 
    while len(coords) >= 1:

        new_letters = [l for l in letters]
        for i in coords:
            new_letters.pop(coords[i])
            

        return ''.join(new_letters)
    else:
        return letters



【问题讨论】:

  • 将您的 while 更改为 if 并将您的 new_letters.pop(coords[i]) 更改为 new_letters.pop(i) 并且您的解决方案有效。虽然它比需要的复杂,但我也推荐@Prune 提供的解决方案。

标签: python python-3.x string for-loop indices


【解决方案1】:

超出范围:你没有追踪你的逻辑吗?您为列表中的 每个 元素遍历整个 coords 列表。从结构上讲,您有一个嵌套循环,其中问题建议只有一个循环。

你也有一个严重的错误,你从coords中获取,然后将它用作列表中的索引

摆脱while;简单地遍历给定的坐标。

new_letters = list(letters)
for pos in coords:
    new_letters.pop(pos)            

return ''.join(new_letters)

【讨论】:

    猜你喜欢
    • 2018-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-04
    • 1970-01-01
    • 2015-04-05
    • 1970-01-01
    • 2021-05-30
    相关资源
    最近更新 更多