【问题标题】:How to multiply the elements in lists with characters and integers?如何将列表中的元素与字符和整数相乘?
【发布时间】:2021-08-14 03:11:58
【问题描述】:

input = [1,4,6,"j",5,"h","t"] 将该列表中的元素相乘并加 2 输出 = [4,10,14,"j",12,"h","t"] 如何在 python 中获得该输出??

【问题讨论】:

  • 不要使用input 作为变量名,你会隐藏内置函数。您的问题可以通过简单的列表组合[i * 2 + 2 if isinstance(i, int) else i for i in l] 来解决。请注意,如果您希望它也可以与 float 一起使用,则可以将类型元组传递给 isinstance()
  • 非常感谢...

标签: python python-3.x list char integer


【解决方案1】:

我建议像@Olvin Roght 展示的那样使用isinstance,或type()

new = [num*2+2 if type(num) == int else num for num in inp]

输出

[4, 10, 14, 'j', 12, 'h', 't']

【讨论】:

    【解决方案2】:
    input = [1,4,6,"j",5,"h","t"]
    output = []
    
    for idx, item in enumerate(input):
        if type(item) is int:
            item *= 2
            item += 2
        output.append(item)
    

    我意识到这比其他答案要多得多的代码,但我想知道它是否效率也较低......因为在 python 中的 [] 内嵌入一些东西也可以被视为 for 循环,对吗?

    【讨论】:

    • 效率比list comprehension稍差,不过还好。您正在使用就地乘法和加法运算符(*=+=),这不是这里的最佳选择,更好的 和更短的 将是 item = item * 2 + 2。同样使用enumerate() 并没有带来任何好处,因为您不需要索引,因此您可以迭代列表for item in input。最后一个建议:不要使用input 或任何其他内置函数名称作为变量名称,因为你在隐藏这个函数。
    • 感谢您的评论,我想我理解您所说的一切,除了阴影。我是否覆盖了input() 函数,并且由于input 初始化而无法调用它吗?
    • 是的,一旦你写了input = ...,你就隐藏了input()函数并且不能调用这个函数。
    猜你喜欢
    • 2012-01-01
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-06
    • 1970-01-01
    相关资源
    最近更新 更多