【问题标题】:Multiply each integer of a list by the integer of another list in Python将列表的每个整数乘以 Python 中另一个列表的整数
【发布时间】:2021-03-29 20:20:43
【问题描述】:

对于模拟场景,我生成 2 个随机列表。

例如:

my_list_1 = [17, 4, 22, 10, 18, 19, 23, 12]

my_list_2 = [82]

刚刚仔细检查了 my_list_2 的类型,结果是

我需要用82*17, 82*4, 82*22, etc.的结果创建一个new_list_3

我试过这种方式:

result_list_3 = []
for i in (my_list):
    result_list_3.append(i * my_list_2)

我得到了错误:

TypeError: 不能将序列乘以“list”类型的非整数

然后我制作了一个字典和一个 pd.DataFrame 来尝试以下操作:

df['result_list_3'] = df['my_list_1'] * df['my_list_2'] 

...我得到了一个巨大的整数列表,这显然不是我要寻找的结果。

【问题讨论】:

  • 使用numpy;当你想做数学时,np.array 是一个更好的向量容器。
  • my_list_3 = [x * my_list_2[0] for x in my_list_1] ?

标签: python pandas list integer multiplication


【解决方案1】:

my_list_1my_list_2定义为np.array如下:

my_list_1 = np.array([17, 4, 22, 10, 18, 19, 23, 12])
my_list_2 = np.array([82])

然后,我们可以使用 numpy 数组的broadcasting 功能,如下所示:

my_list_3 = my_list_1 * my_list_2

你会得到:

print(my_list_3)

array([1394,  328, 1804,  820, 1476, 1558, 1886,  984])

【讨论】:

  • 我正在通过 for 循环生成随机列表。所以我已经按照你的指示定义了数组,但是在 for 循环中。广播时仍然出现错误,真的不知道为什么不适合我。
  • @Foldhy 对于要广播的 2 个线性 np.array,它们要么具有相同的大小,要么其中一个只有一个元素,例如上面的示例 my_list_2。否则,您无法广播它们。你的数组大小兼容吗?
  • 好吧,我的 list_2 总是只有 1 个元素,正如示例所公开的那样。而 my_list_1 会更改大小,因为列表是由随机整数循环生成的。这会阻止 numpy 数组正常工作吗?
  • @Foldhy 你用来生成随机整数的函数是什么?它是一个 numpy 函数吗?
  • my_list_1 这是一个将“if”和“else”条件放入 def 变量的 while 循环。然后我将结果存储在一个列表中。整数由 np.random.randint() 函数生成。对于 my_list_2,唯一的整数是由 for 循环生成的,它在 2 个变量之间进行除法。
【解决方案2】:

这可以通过 for 循环轻松解决:

result = []
for i in list1:
    for l in list2:
        result.append(i*l)

【讨论】:

  • 嗨,这在同一行中重复了相同结果的丢失次数。你能仔细检查一下吗?
【解决方案3】:

您可以使用列表推导:

result = [a*b for a in my_list_1 for b in my_list_2]
#[1394, 328, 1804, 820, 1476, 1558, 1886, 984]

它适用于任何长度的列表。

【讨论】:

  • 在我使用这个解决方案的情况下,循环没有中断。代码中的某些内容无法正常工作?
  • @Foldhy 对不起,如果这个问题有点冒犯,但我不知道你编程了多久...你在打印result
  • 是的,我打印。但是,第一次在我的代码中执行需要很长时间。在第二次尝试中,在同一行中多次重复相同的结果。不确定它是否与我的其他代码有关。
  • @Foldhy 也许您之前正在修改列表
  • 考虑列表是由随机整数循环生成的。所以 my_list_1 会不断改变大小,而 my_list_2 总是只使用 1 个随机整数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-31
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 2022-01-07
  • 2022-07-04
  • 1970-01-01
相关资源
最近更新 更多