【问题标题】:issue with incrementing integer elements in list列表中增加整数元素的问题
【发布时间】:2020-09-03 22:31:32
【问题描述】:

考虑一下列表: mylist = [1,2,3,'a','b',4,5,'c',6]

我想要做的是创建一个程序,在将每个整数元素递增1 后返回列表,跳过非整数元素。我尝试了下面的代码来使用带有参数xwhile循环定义一个函数:

def f(x):
    i = -1
    while (i < (len(x) - 1)):
        i+=1
        if (type(x[i]) != "<class 'int'>"):
            continue
        x[i]+=1
    return x

现在,我尝试使用此函数返回f(mylist) 的值。以下是输出:

[1, 2, 3, 'a', 'b', 4, 5, 'c', 6]

正如你所看到的,它返回输入本身,当我真正想要它时这是非常出乎意料的

[2, 3, 4, 'a', 'b', 5, 6, 'c', 7]

即使多次查看我的代码,我也找不到它有什么问题。

如果有人帮我解决了,我会很高兴的。

【问题讨论】:

  • "&lt;class 'int'&gt;" 是一个字符串。列表中的任何元素是否与该字符串完全相等?大概不会。你正在寻找isinstance
  • "&lt;class 'int'&gt;" 是一个字符串。对象的类型不可能等于这个确切的字符串。请参阅有关type 的文档:docs.python.org/3.8/library/functions.html#type
  • 请不要在问题标题中使用大写
  • 我的建议是将整数与字符串分开,并使用不同的同构列表,而不是使用一个异构列表
  • 既然您理解了代码中的错误,请不要编辑它。这让人无法理解答案在说什么。

标签: python python-3.x list function while-loop


【解决方案1】:

你可以的

def f(x):
    return [i + 1 if type(i) is int else i for i in x]

或者通过for循环

def f(x):
    for i, v in enumerate(x):
        if type(v) is int:
            x[i] += 1
    return x

并更正描述中的功能

def f(x):
    i = -1
    while i < len(x) - 1:
        i+=1
        if type(x[i]) != int:
            continue
        x[i]+=1
    return x

mylist = [1,2,3,'a','b',4,5,'c',6]
print(f(mylist))

此函数将返回一个新列表,该列表将每个 int 值加一,而对于其他值,它将保持原样。 该函数将返回

[2, 3, 4, 'a', 'b', 5, 6, 'c', 7]

【讨论】:

  • 感谢您的建议,但您能告诉我我的代码有什么问题吗?
  • if (type(x[i]) != "&lt;class 'int'&gt;"):需要是if (type(x[i]) != int):
  • 因为类是唯一的,我们可以使用is/is not 来比较它们而不是==/!=
  • @Vector 我根据您的代码编辑的代码返回了相同的结果[2, 3, 4, 'a', 'b', 5, 6, 'c', 7]
【解决方案2】:

您应该在递增之前使用isinstance 检查是否有int 类型的项目,否则保持原样。

>>> lst = [1, 2, 3, 'a', 'b', 4, 5, 'c', 6]
>>> [x + 1 if isinstance(x, int) else x for x in lst]
[2, 3, 4, 'a', 'b', 5, 6, 'c', 7]

此外,如果您想要一个普通的循环方法而不是列表推导式,for 循环更合适,因为您知道需要迭代多少个元素。 while 循环仅适用于您不知道需要的迭代次数的情况。在这里创建一个新列表也更容易,而不是处理索引。

def f(x):
    result = []
    for item in x:
        if isinstance(item, int):
            result.append(item + 1)
            continue
        result.append(item)
    return result

print(f([1, 2, 3, 'a', 'b', 4, 5, 'c', 6]))
# 2, 3, 4, 'a', 'b', 5, 6, 'c', 7]

【讨论】:

    【解决方案3】:
    def f(x):
    i = -1
    while (i < (len(x) - 1)):
        i+=1
        if (not isinstance(x[i], int)):
            continue
        x[i]+=1
    return x
    

    【讨论】:

    • 考虑写几行!这为您的“答案”增加了很多价值。
    • 并修复缩进
    【解决方案4】:

    请找到代码以获得您问题中所述的所需输出。

    def f(x):
    i = 0
    while (i < (len(x))):
        if (type(x[i])) == int:
            x[i]+=1         
        else:
            print("Char",x[i])
        i+=1
    return x
    mylist = [1, 2, 3, 'a', 'b', 4, 5, 'c', 6]
    f(mylist)
    

    输出:

    【讨论】:

      猜你喜欢
      • 2014-02-25
      • 2019-05-08
      • 2020-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多