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)
我在 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)