下面的函数'url' : 'https://my-service.my-domain.com/resource'
接受一个数字并返回一个字符串元组。我可以单线编写以下循环吗?
foo
答案 0 :(得分:2)
我会做这样的事情:
def foo(i):
return (i,i+1)
r1, r2 = [tpl for tpl in zip(*map(foo,range(10)))]
答案 1 :(得分:1)
这应该做到:
r1, r2 = map(list, zip(*[foo(i) for i in range(10)]))
通过将元组列表作为args传递给zip
(使用*
将列表转换为args列表),可以“解压缩”它们。将list
函数映射到结果元组上,您就有两个列表。
答案 2 :(得分:1)
您只需要执行以下简单操作
r1, r2 = map(list, zip(*foo))
答案 3 :(得分:0)
def foo(i):
return ("A%d" % i, "B%d" % i)
# This is the one-liner
[r1, r2] = map(list, zip(*(foo(i) for i in range(10))))
print(r1)
print(r2)
zip
接受M个N个项目的序列,并返回N个M个项目的序列。通过将由comprehension表达式生成的序列放在*
之前,我将其转换为两个元素的10个单独的序列。映射到list
只是为了将所有结果都放入列表中。