【问题标题】:python: merge list item if they are following ints but index is out of rangepython:如果它们遵循整数但索引超出范围,则合并列表项
【发布时间】:2022-12-16 09:47:03
【问题描述】:

例如我有一个这样的列表:

list = [3, 4, "-", 7, "+", 9, "/", 2]

在我的计算器输入上下文中,每个数字都作为列表项到达,但例如 "3", "4" 应该是 "34"。我最终得到了这段代码:=

for index, item in enumerate(list):
    a = index + 1
    if type(item) is int and type(list[a]) is int:
        list[index] = int(str(item) + str(list[a]))
        list.pop(a)

list.pop(a) 行不起作用,因为对于最后一项,您无法检查下一项是否为 int,因为下一项不存在,它超出范围。您对如何避免这种情况有任何想法吗?

【问题讨论】:

  • 在迭代列表时修改列表很少是个好主意。只需创建一个新列表。

标签: python list


【解决方案1】:

您可以简单地向您的 if 声明添加另一个条件:

for index, item in enumerate(list):
    a = index + 1
    if a < len(list) and type(item) is int and type(list[a]) is int :
        list[index] = int(str(item) + str(list[a]))
        list.pop(a)

【讨论】:

    【解决方案2】:

    是的,您可以使用 try/except 块来处理 list[a] 超出范围的情况。这是您可以修改代码以处理此问题的一种方法:

    for index, item in enumerate(list):
        a = index + 1
        try:
            if type(item) is int and type(list[a]) is int:
                list[index] = int(str(item) + str(list[a]))
                list.pop(a)
        except IndexError:
            # Handle the case where a is out of range
            pass
    

    except 块中,您可以以任何您认为合适的方式处理 a 超出范围的情况。例如,您可以简单地 break 退出循环,或者您可以完全做其他事情。

    解决此问题的另一种方法是反向遍历列表,这样您始终可以检查一个有效的索引。这将避免需要 try/except 块,并且还可以避免在迭代列表时修改列表,这很容易出错。以下是如何使用此方法的示例:

    for index in range(len(list)-1, 0, -1):
        if type(list[index]) is int and type(list[index-1]) is int:
            list[index-1] = int(str(list[index-1]) + str(list[index]))
            list.pop(index)
    

    在此代码中,我们反向遍历列表,从倒数第二个项目开始,到第一个项目结束。这使我们能够始终检查有效索引,这也意味着我们不必在迭代列表时修改列表,这可以使代码更易于理解。

    【讨论】:

      猜你喜欢
      • 2016-10-03
      • 1970-01-01
      • 2020-07-23
      • 2022-09-23
      • 1970-01-01
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多