Python按第二个列表的所有元素划分列表

时间:2015-01-24 19:18:19

标签: python list

我有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)]

之类的东西

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]