Python 列表理解设置局部变量

Python List Comprehension Setting Local Variable

我在 Python

中无法理解列表

基本上我有这样的代码

output = []
for i, num in enumerate(test):
    loss_ = do something
    test_ = do something else
    output.append(sum(loss_*test_)/float(sum(loss_)))

我如何使用列表推导来写这个:

[sum(loss_*test_)/float(sum(loss_))) for i, num in enumerate(test)]

但是我不知道如何分配 loss_test_

的值

正如 Yaroslav 在评论中提到的,列表理解不允许您直接将值保存到变量中。

但是它允许您使用函数。

我做了一个非常基本的示例(因为您提供的示例不完整,无法测试),但它应该显示您如何仍然可以在列表理解中执行代码。

def loss():
    print "loss"
    return 1

def test():
    print "test"
    return 5

output = [loss()*test() for i in range(10) ]
print output

这种情况将导致列表 [5, 5, 5, 5, 5, 5, 5, 5, 5, 5]

我希望这能以某种方式向您展示如何最终实现您正在寻找的行为。

您可以使用嵌套列表理解来定义这些值:

output = [sum(loss_*test_)/float(sum(loss_)) 
          for loss_, test_ in ((do something, do something else) 
                               for i, num in enumerate(test))]

当然,这是否更具可读性是另一个问题。

ip_list = string.split(" ")                     # split the string to a list using space seperator

for i in range(len(ip_list)):                   # len(ip_list) returns the number of items in the list - 4 
                                                # range(4) resolved to 0, 1, 2, 3 

    if (i % 2 == 0): ip_list[i] += "-"          # if i is even number - concatenate hyphen to the current IP string 
    else: ip_list[i] += ","                     # otherwize concatenate comma

print("".join(ip_list)[:-1])                    # "".join(ip_list) - join the list back to a string
                                                # [:-1] trim the last character of the result (the extra comma)