如何在Python中对列表中的每个元素进行分割

805 阅读4分钟

摘要: 在**列表**中划分每个元素的最Pythonic方法是使用以下列表理解:[element/divisor for element in given_list]

继续阅读,可以发现许多其他的解决方案。


问题: 如何除掉一个列表中的每个元素并返回一个包含商的结果列表?

例子

li = [38, 57, 76, 95, 114, 161.5]
num = 19
# Some way to divide each element of li with 19

预期的输出

[2.0, 3.0, 4.0, 5.0, 6.0, 8.5]

所以,不要再拖延了,让我们深入了解这个关键问题,并找出解决这个问题的不同方法。

方法 1: 使用 For 循环

方法

  • 创建一个空列表,存储商数。
  • 使用for循环遍历给定列表中的所有元素。
  • 用给定的数字/除数分割每个元素,并将结果附加到结果列表中。
  • 最后,在所有商数被计算并附加到列表中后,显示结果列表。

代码

li = [38, 57, 76, 95, 114, 161.5]
num = 19
res = []
for val in li:
    res.append(val/num)
print(res)

输出

[2.0, 3.0, 4.0, 5.0, 6.0, 8.5]

方法二:使用列表理解法

让我们深入研究一下对给定问题的最Pythonic的解决方案。

方法 :创建一个列表理解器,这样。

  • 表达式: a/num 代表列表中的每个元素被给定的除数除掉。这里的上下文变量a 代表给定列表中的每个元素,而num 代表除数。
  • 上下文。上 下文包含上下文变量a ,它的范围是列表中的所有元素,在每次迭代中,它代表该迭代中某个特定索引的元素。

代码

li = [38, 57, 76, 95, 114, 161.5]
num = 19
res = [a/num for a in li]
print(res)

输出

[2.0, 3.0, 4.0, 5.0, 6.0, 8.5]

列表理解是一种创建列表的紧凑方式。简单的公式是[expression + context].

⦿ 表达式:对每个列表元素做什么?
⦿ 语境:要选择哪些元素?上下文由任意数量的forif 语句组成。
⦿示例 [x for x in range(3)] 创建列表

[0, 1, 2]

方法3:使用map和lambda

方法 :这里的想法是使用一个匿名的lambda 函数来计算每个元素与给定除数的除法。你可以在内置函数map 的帮助下,将列表中的每个元素作为输入传给lambda 函数。

代码:

li = [38, 57, 76, 95, 114, 161.5]
num = 19
res = list(map(lambda x: x/num, li))
print(res)

输出

[2.0, 3.0, 4.0, 5.0, 6.0, 8.5]
  • map() 函数通过对每个迭代变量的第i个元素应用 "转化器函数",将一个或多个迭代变量转化为一个新的迭代变量。参数是 转化器函数对象一个或多个迭代变量。如果你传递n个迭代变量作为参数,转化器函数必须是一个n次方函数,接受n输入参数。返回值是一个可迭代的地图对象,其中有经过转换的元素,也可能是聚合的元素。

  • lambda函数 是Python中的一个 匿名函数。它以关键字lambda 开始,后面是一个用逗号分隔的零个或多个参数的列表,然后是冒号和返回表达式。例如,lambda x, y, z: x+y+z 将计算出三个参数值的总和x+y+z

方法4:使用Numpy

对于给定的问题,另一个简单的解决方法是使用Numpy 库。在这里,你有两种选择或方法,可以帮助你推导出输出。

4.1 使用除法/运算符

  • 使用np.array 方法将给定的列表转换成一个Numpy 数组。
  • 使用除法运算符"/"将这个数组的每个元素与给定的除数相除
  • 为了从输出数组中生成结果列表,你可以使用ndarray.tolist() 方法。

代码

import numpy as np
li = [38, 57, 76, 95, 114, 161.5]
arr = np.array(li)
num = 19
res = arr/num
print(res.tolist())

输出

[2.0, 3.0, 4.0, 5.0, 6.0, 8.5]

4.2 使用numpy.divide()

  • 使用np.array 方法将给定的列表转换为一个Numpy 的数组。
  • 使用np.divide() 函数将这个数组的每个元素与给定的除数相除。
  • 为了从输出数组中生成结果列表,你可以使用ndarray.tolist() 方法。

代码

import numpy as np
li = [38, 57, 76, 95, 114, 161.5]
arr = np.array(li)
num = 19
res = np.divide(arr, num)
print(res.tolist())

输出

[2.0, 3.0, 4.0, 5.0, 6.0, 8.5]

numpy.divide()方法返回给定数组中的输入元素的真除法。

语法

numpy.divide(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj])

✨当你有多个除法过程时,你可以通过使用NumPy除法来大大加速它。它不仅允许你进行元素除法,而且这也适用于多维的NumPy数组。比如说

import numpy as np
# Create 2D lists
a = [[1, 2, 3],
     [4, 5, 6]]
b = [[2, 4, 6],
     [8, 10, 12]]
# Convert lists to 2D NumPy arrays
a = np.array(a)
b = np.array(b)
# Divide the 2D arrays
print(a / b)

输出

[[0.5 0.5 0.5][0.5 0.5 0.5]]

总结

我们已经成功地学习了用给定的数字分割给定列表中的元素的四种不同方法。我希望这个教程能帮助回答你所有的疑问。