在不使用类的情况下在Python中减去两个列表

Ray*_*cik 2 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) 
>>[30, 15, 40, 195]    **the correct result**
Run Code Online (Sandbox Code Playgroud)

但是,必须有一种更简单的方法来执行此操作,而无需导入我缺少的类或库.

idj*_*jaw 11

显示这个的简单方法是:

a = [420, 660, 730, 735] 
b = [450, 675, 770, 930]


print([v2 - v1 for v1, v2 in zip(a, b)])
Run Code Online (Sandbox Code Playgroud)

zip将在列表中的每个元素之间创建一个元组.因此,如果您单独运行zip,您将拥有:

zip(a, b)

[(420, 450), (660, 675), (730, 770), (735, 930)]
Run Code Online (Sandbox Code Playgroud)

然后,为了进一步分析我提供的答案中发生的事情,你正在做的是迭代列表中的每个元素,然后指定它v1并且v2是元组中的每个项目.那v2 - v1就是你的数学运算.所有这些都包含在所谓的列表理解中.

如果您仍然确信您仍然不想使用zip,并且如果您的示例使用两个相同的列表,那么我建议删除while循环并使用for.您的解决方案将与您已有的解决方案非常相似,但同样如此:

n = []
for i, v in enumerate(a):
    n.append(b[i] - v)
print(n)
Run Code Online (Sandbox Code Playgroud)

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


tde*_*ney 5

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]
Run Code Online (Sandbox Code Playgroud)