【发布时间】:2019-11-14 08:15:02
【问题描述】:
我需要从列表中每个引用的数字中减去 11。除了这里,我到处寻找有关此主题的帮助。
代码如下:
list1 = [ 1, '33', 2, '49', 3, '63']
print(list1-11)
【问题讨论】:
-
您要从列表中的所有元素中减去 11,还是仅从字符串(“引用”)中减去 11?
标签: python list subtraction
我需要从列表中每个引用的数字中减去 11。除了这里,我到处寻找有关此主题的帮助。
代码如下:
list1 = [ 1, '33', 2, '49', 3, '63']
print(list1-11)
【问题讨论】:
标签: python list subtraction
这是使用isinstance 检查类型和列表理解的一种方法。
例如:
lst = [ 1, '33', 2, '49', 3, '63']
print([int(i) - 11 if isinstance(i, str) else i for i in lst])
输出:
[1, 22, 2, 38, 3, 52]
【讨论】:
您需要使用 int() 将这些字符串值转换为 int,以便您可以向其中添加一个整数。
简单地使用
print([int(i) - 11 for i in list])
【讨论】:
TL;DR [int(x) - 11 for x in list1]
第一个减法不是在列表上定义的运算符。它是为 numpy 数组定义的,例如,其中仅使用 * 数字。 python中的列表可能包含任何内容,那么减法应该做什么?有人可能会说它应该创建一个没有元素 11 或至少第一次出现的新列表。无论如何,实际上你的代码只会因为告诉你列表不知道减去意味着什么而失败。
减法也没有在字符串上定义,即你不能指望'33' - 11返回22。也许在 JavaScript 中你可以,但在 Python 中不行。 Python 不会尝试将您提供给它的任何类型的对象转换为另一种类型,以便它可以应用某些运算符或方法。它宁愿失败并告诉你:如果你想让我将此对象转换为int,你应该告诉我。
因此,我们使用int() 包装列表中的所有对象,它试图将任何可以转换的对象转换为int。这对于像套接字这样的随机对象以及其中包含非法字符(如字母)的字符串都会失败。
一旦我们有了int 对象的列表,我们就可以愉快地从它们中减去另一个int,在这种特殊情况下为11。使用 Python 的 list comprehension,我们可以将这两个步骤结合起来,因为我们要做的本质上是将列表中的每个元素映射到其他元素。
【讨论】: