如何迭代地将 2 个列表中的元素应用到新函数中? [复制]
Posted
技术标签:
【中文标题】如何迭代地将 2 个列表中的元素应用到新函数中? [复制]【英文标题】:How can i iteratively apply elements from the 2 lists into a new function? [duplicate] 【发布时间】:2017-01-09 08:43:44 【问题描述】:假设我有 2 个列表,其中第一个列表的第 i 个元素对应于第二个列表的第 i 个元素。如何迭代地将 2 个列表中的元素应用到不同的函数中?
def GetLists(n):
List1 = []
List2 = []
n = int(input("how many terms: "))
for i in range(1,n):
val1 = float(input("what is val1: "))
val2 = float(input("what is the corresponding val2: "))
List1.append(val1)
List2.append(val2)
return List1, List2
def newfunc(ListA, ListB, var):
# take i-th elements from lists A and B where (a,b) are the i-th elements of A and B
# want output = sum(a * var ** b) for index in len(A) if len(A) == len(B)
最pythonic的方法是什么?如果可能的话,我想这样做而不导入外部模块。
编辑:我检查了其他解决方案。 “重复”答案需要导入模块;我试图不这样做。此外,我正在尝试执行返回输出而不是打印值的操作,这使 zip 的使用复杂化,超出了重复答案中显示的级别。
【问题讨论】:
您在寻找for a, b in zip(ListA, ListB):
吗?另外,请注意,您发布的不是 Python - 大小写很重要。
@jonrsharpe 哪一部分不是python(哪一部分取决于大小写)?请原谅我的无知,我还是个初学者。
Def
-> def
, For
-> for
。如果您是新手,请阅读教程。这是重复的,zip
不需要导入,您可以使用 a
和 b
做任何您想做的事情。
啊,我的粗心错误。我在手机上打字。我现在将对其进行编辑。
至于复制,“原版”需要导入itertools。它还打印并且不对压缩元素执行操作。
【参考方案1】:
从列表 A 和 B 中获取第 i 个元素,其中 (a,b) 是 A 和 B 的第 i 个元素
如果 len(A) == len(B),则希望输出 = sum(a * var ** b) 用于 len(A) 中的索引
这就是你要找的吗?它将两个相同长度的列表压缩在一起,计算f(a, b, i) = a[i] * var ** b[i]
为一些常数var
和每个i
其中0 <= i < len(a)
。然后它返回总和。
def process(list_a, list_b, var):
if len(list_a) != len(list_b):
raise ValueError('Lists are not equal in length')
def combine():
for a, b in zip(list_a, list_b):
yield a * var ** b
return sum(combine())
print(process([5, 2, 3], [2, 2, 3], 10))
输出
3300
这个输出是(1 * 10 ** 2) + (2 * 10 ** 2) + (3 * 10 ** 3)
的结果。
编辑
上述方法将组合逻辑(您问题的重点)与求和逻辑分离。另一种可以说是更 Pythonic(根据您的要求)并且更短的替代方法是使用 generator expression,正如 cmets 中针对此答案所建议的那样:
def process(list_a, list_b, var):
if len(list_a) != len(list_b):
raise ValueError('Lists are not equal in length')
return sum(a * var ** b for a, b in zip(list_a, list_b))
print(process([1, 2, 3], [2, 2, 3], 10))
基本上,sum
中的表达式充当了我在之前方法中定义的 生成器函数 combine
的匿名替换。
【讨论】:
这是一个不同于我正在寻找的公式,但我应该能够将相同的原理应用于我的。谢谢!编辑:公式已更正,就像一个魅力。 @mikey 有点困,误读了公式。我编辑的帖子中的公式是否正确? 是的,没错。 我能问一下downvote是为了什么吗? 我赞成您的回答,因为代码有效。一定是别人。以上是关于如何迭代地将 2 个列表中的元素应用到新函数中? [复制]的主要内容,如果未能解决你的问题,请参考以下文章