Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/list/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Python中不使用类减去两个列表_Python_List_Difference - Fatal编程技术网

在Python中不使用类减去两个列表

在Python中不使用类减去两个列表,python,list,difference,Python,List,Difference,我有两个数字列表,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) >>[

我有两个数字列表,ab,我正试图这样减去它们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=[420660730735]
b=[4506757070930]
i=0
j=len(a)
差异=[]
而i>[30,15,40,195]**正确的结果**

但是,必须有一种更简单的方法来实现这一点,而不必导入我缺少的类或库

给定,您的列表
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,您将拥有以下功能:

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)

因此,您必须创建一个新列表来保存新数据。使用
枚举
,以便在每次迭代中获得索引和值,并将数学运算附加到新列表中

考虑到评论:

假设两个列表都纯由整数组成:

# a and b are the lists
difference = []
for i in range(min(len(b), len(a))):
    difference.append(b[i] - a[i])

编辑:其他列表理解更像python,但这更符合原始代码。
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]

为避免长度不等的列表出现问题,进行了一些小的改进:
对于范围内的i(min(len(a),len(b)):
。这是如何使用Python实现这一点的一个完美示例!正是我想要的,还有一个很好的解释:D谢谢