我有2个清单,
a = [6,9,8]
b = [2,3,4]
我可以将第一个列表除以第二个列表中的相应元素吗?
要获得c = [3,3,2]
之类的输出,因为[6/2=3, 9/3=3, 8/4=2]
。
像c = [a(0)/b(0),a(1)/b(1),a(2)/b(2)]
?
答案 0 :(得分:4)
使用zip()
function配对2个或更多列表的元素:
c = [a_elem // b_elem for a_elem, b_elem in zip(a, b)]
我使用//
进行整数除法,因为你期望整数输出。
在Python 2上,由于两个操作数都是整数而你可能没有使用from __future__ import division
,但是在Python 3上或使用 future 导入时,它不会有任何区别/
运算符会导致float
结果。
Python 3上的演示显示了差异:
>>> a = [6, 9, 8]
>>> b = [2, 3, 4]
>>> [a_elem // b_elem for a_elem, b_elem in zip(a, b)]
[3, 3, 2]
>>> [a_elem / b_elem for a_elem, b_elem in zip(a, b)]
[3.0, 3.0, 2.0]
答案 1 :(得分:0)
您还可以在公共索引处使用枚举除法元素:
a = [6,9,8]
b = [2,3,4]
print([ele // b[ind] for ind,ele in enumerate(a)])
[3,3,2]
如果你有很多数据,那么numpy可能是个不错的选择:
import numpy as np
a = np.array([6,9,8])
b = np.array([2,3,4])
print(a//b)
[3 3 2]
如果你碰巧有一个列表比另一个更长,那么你可以使用填充值为1的itertools.izip_longest,这样我们就可以保留元素来自更长的lst:
a = [6,9,8,4]
b = [2,3,4]
from itertools import izip_longest
print([x//y for x,y in izip_longest(a,b,fillvalue=1)])
[3, 3, 2, 4]