【问题标题】:Remove indice after finding int in list - Python在列表中找到 int 后删除索引 - Python
【发布时间】:2016-03-04 03:49:30
【问题描述】:

我有一个在给定列表中搜索数字 13 的脚本。如果找到 13,则需要将其删除,但我还需要删除它之后的索引。我找到了所有的 13 并将它们删除,但我不确定删除它之后的索引的最佳方法。我知道我需要先在 13 之后删除索引,因为删除后会发生变化。最后我需要返回我所做的所有索引的总和。

这是我在 Codebat.com 中所做的一项挑战,它不允许导入。

这是我所拥有的:

def sum13(nums):
    #Return 0 for empty lists
    if nums == '':
        return 0

    #Find 13s, remove next index and then index of 13
    while(True):
        if 13 in nums:
            #remove the index after 13 here
            nums.remove(13)         
        else:
            break

    #Return the sum of all indices.  
    else:
        return sum(nums)

输入是随机的整数列表,例如:

sum13([13, 1, 2, 13, 2, 1, 13]) # Expected Outcome: 3
sum13([1, 2, 13, 2, 1, 13])     # Expected Outcome: 4

为了获得下一个索引,我在 for 循环中尝试了 nums.index(i+1) 的变体,这只会产生错误,并且一直在尝试列表推导和枚举,但我不是 100%那些还没有。

【问题讨论】:

  • 连续多个 13 的预期行为是什么?
  • 可能相关:您可能想使用for with reversed order to do this safely
  • 如果到了list的最后,就去掉所有的13s,如果多个13s之后还有什么,那就是下一个要删除的索引。

标签: python list indexof


【解决方案1】:

如果您尝试索引过去的列表长度,您会得到错误,但这可以通过向列表中添加一个额外的元素来规避(在您的情况下它可以为零,因为您在所有元素的总和之后):

def sum13(nums):
    nums += [0]
    for i in range(len(nums) - 1):
        if nums[i] == 13:
            nums[i] = 0
            nums[i + 1] = 0
    return sum(nums)

如果您想连续处理多个 13,请按相反顺序进行:

    for i in reversed(range(len(nums) - 1)):

【讨论】:

  • 它有效,谢谢。需要明确的是,这基本上是使任何 13 索引为 0 的索引吗?
  • 基本上是的,但是您将术语索引与价值混淆了。索引是值在列表中的位置。例如,列表中第一个元素的索引是0,第二个元素是1
  • 哦,我明白了。它将索引的实际值更改为零,所以当它总结时它不会添加任何东西。没想到,谢谢。
【解决方案2】:
def sum13(nums):
    return (sum13(nums[2:]) if nums[0] == 13 else nums[0] + sum13(nums[1:])) if nums else 0

缺点是它不能连续处理多个 13。好处是它不会修改它的参数(一件好事),因此也可以处理只读数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多