gpt4 book ai didi

python - 映射具有多个参数的特定函数的最佳 pythonic 方法

转载 作者:太空宇宙 更新时间:2023-11-04 08:10:58 25 4
gpt4 key购买 nike

假设我有一个方法:

def add_force_coupling(g1, g2, name):
print {(g1,g2): name}

然后是代码:

l = 3
for g1 in range(l):
for g2 in range(l):
name = 'G' + str(g1) + str(g2)
add_force_coupling(g1, g2, name)

产生结果:

{(0, 0): 'G00'}, {(0, 1): 'G01'}, {(0, 2): 'G02'}, {(1, 0): 'G10'}, ..., {(2, 2): 'G22'}

现在我想通过使用 map() 函数使它更像 pythonic。到目前为止我有:

list1 = sorted(l*range(l))
list2 = l*range(l)
list3 = ["".join(values) for values in zip(l*l*'G',list(map(str,l1)),list(map(str,l2)))]
map( add_force_coupling, list1, list2, list3 )

这正是我想要的,但比标准双循环更难看,因为 int 列表需要在 list3 中转换为 str。也很难理解发生了什么。有没有更好的 pythonic 方法用 map()zip() 或其他方式重写双循环?

注意:改变方法不是一种选择

最佳答案

不要使用 map()。使用列表理解和 itertools.product() :

from itertools import product

[{(i, j): 'G{}{}'.format(i, j)} for i, j in product(range(l), repeat=2)]

或将您的函数用于左侧表达式:

[add_force_coupling(i, j, 'G{}{}'.format(i, j))
for i, j in product(range(l), repeat=2)]

令我印象深刻的是,您希望在这里建立一个字典;听写理解可以做到这一点:

{(i, j): 'G{}{}'.format(i, j) for i, j in product(range(l), repeat=2)}

在这里,您可以使用 result[i, j] 解决每个项目。

但是给定索引,嵌套列表将是一种更有效的数据存储机制:

[['G{}{}'.format(i, j) for j in range(l)] for i in range(l)]

并用

处理结果
result[i][j]

关于python - 映射具有多个参数的特定函数的最佳 pythonic 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22462321/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com