在不使用 类 的情况下减去 Python 中的两个列表
Subtract two lists in Python without using classes
我有两个数字列表,a,b,我想这样减去; b - a。
我希望这对初学者来说很容易理解,所以我不想导入 类 或库。
这是我试过的,有效:
a = [420, 660, 730, 735]
b = [450, 675, 770, 930]
i = 0
j = len(a)
difference = []
while i < j:
difference.append(b[i] - a[i])
i += 1
print (difference)
>>[30, 15, 40, 195] **the correct result**
但是,必须有一种更简单的方法来执行此操作,而无需导入 类 或我缺少的库。
鉴于您的列表 a
和 b
,b - a
可以评估为
difference = [each[0] - each[1] for each in zip(b, a)]
显示这一点的简单方法是:
a = [420, 660, 730, 735]
b = [450, 675, 770, 930]
print([v2 - v1 for v1, v2 in zip(a, b)])
zip
将在列表中的每个元素之间创建一个元组。所以如果你 运行 单独压缩你会得到这个:
zip(a, b)
[(420, 450), (660, 675), (730, 770), (735, 930)]
然后,为了进一步分析我提供的答案中发生了什么,您正在做的是遍历列表中的每个元素,然后指定 v1
和 v2
是每个项目在你的元组中。然后 v2 - v1
几乎就是在做你的数学运算。所有这些都包含在所谓的列表理解中。
如果您仍然确信您根本不想使用 zip,并且如果您的示例使用两个相等的列表,那么我的建议是放弃 while 循环并改用 for。您的解决方案将与您已有的解决方案非常相似,但因此:
n = []
for i, v in enumerate(a):
n.append(b[i] - v)
print(n)
因此,您必须创建一个新列表来保存您的新数据。使用 enumerate
这样您就可以通过每次迭代获得索引和值,并将您的数学运算附加到新列表中。
考虑到评论:
假设两个列表都完全由整数组成:
# a and b are the lists
difference = []
for i in range(min(len(b), len(a))):
difference.append(b[i] - a[i])
编辑:其他列表推导更符合 Pythonic,但这更符合原始代码
operator
模块为这种情况提供了标准运算符的功能版本。
>>> import operator
>>> a = [420, 660, 730, 735]
>>> b = [450, 675, 770, 930]
>>> difference = list(map(operator.sub, b, a))
>>> print(difference)
[30, 15, 40, 195]
我有两个数字列表,a,b,我想这样减去; b - a。
我希望这对初学者来说很容易理解,所以我不想导入 类 或库。
这是我试过的,有效:
a = [420, 660, 730, 735]
b = [450, 675, 770, 930]
i = 0
j = len(a)
difference = []
while i < j:
difference.append(b[i] - a[i])
i += 1
print (difference)
>>[30, 15, 40, 195] **the correct result**
但是,必须有一种更简单的方法来执行此操作,而无需导入 类 或我缺少的库。
鉴于您的列表 a
和 b
,b - a
可以评估为
difference = [each[0] - each[1] for each in zip(b, a)]
显示这一点的简单方法是:
a = [420, 660, 730, 735]
b = [450, 675, 770, 930]
print([v2 - v1 for v1, v2 in zip(a, b)])
zip
将在列表中的每个元素之间创建一个元组。所以如果你 运行 单独压缩你会得到这个:
zip(a, b)
[(420, 450), (660, 675), (730, 770), (735, 930)]
然后,为了进一步分析我提供的答案中发生了什么,您正在做的是遍历列表中的每个元素,然后指定 v1
和 v2
是每个项目在你的元组中。然后 v2 - v1
几乎就是在做你的数学运算。所有这些都包含在所谓的列表理解中。
如果您仍然确信您根本不想使用 zip,并且如果您的示例使用两个相等的列表,那么我的建议是放弃 while 循环并改用 for。您的解决方案将与您已有的解决方案非常相似,但因此:
n = []
for i, v in enumerate(a):
n.append(b[i] - v)
print(n)
因此,您必须创建一个新列表来保存您的新数据。使用 enumerate
这样您就可以通过每次迭代获得索引和值,并将您的数学运算附加到新列表中。
考虑到评论:
假设两个列表都完全由整数组成:
# a and b are the lists
difference = []
for i in range(min(len(b), len(a))):
difference.append(b[i] - a[i])
编辑:其他列表推导更符合 Pythonic,但这更符合原始代码
operator
模块为这种情况提供了标准运算符的功能版本。
>>> import operator
>>> a = [420, 660, 730, 735]
>>> b = [450, 675, 770, 930]
>>> difference = list(map(operator.sub, b, a))
>>> print(difference)
[30, 15, 40, 195]