我想将列表或数组映射到python 3.x
中的数组,输入[a,b,c]
并得到类似[a*2, a*2+1, b*2, b*2+1, c*2, c*2+1]
的结果
例如:
a = np.array([2,4,6])
result = []
for a1,a2 in zip(a*2, a*2+1):
result = result + [a1,a2]
print(result)
# Output: [4, 5, 8, 9, 12, 13]
必须有更好的方法。列表和numpy
解决方案都可以。谢谢
答案 0 :(得分:4)
一种方法:
import numpy as np
a = np.array([2, 4, 6])
b = np.repeat(2 * a, 2)
b[1::2] += 1
print(b)
# [ 4 5 8 9 12 13]
另一种方式:
b = np.stack([2 * a, 2 * a + 1], axis=1).ravel()
编辑:
如果您想要一种允许您将数组扩大任意倍数(而不仅仅是2倍)的解决方案,则可以使用如下函数:
import numpy as np
def make_longer(a, n):
b = np.tile(n * a[:, np.newaxis], (1, n))
b += np.arange(n, dtype=b.dtype)
return b.ravel()
a = np.array([2, 4, 6])
print(make_longer(a, 2))
# [ 4 5 8 9 12 13]
print(make_longer(a, 3))
# [ 6 7 8 12 13 14 18 19 20]
答案 1 :(得分:2)
您可以尝试;
In [1]: a = [2, 4, 6]
In [2]: f1 = lambda x: x*2
In [3]: f2 = lambda x:x*2+1
In [4]: [f(x) for x in a for f in (f1, f2)]
Out[4]: [4, 5, 8, 9, 12, 13]
或一个衬里
In [4]: [f(i) for i in a for f in (lambda x: x*2, lambda x: x*2+1)]
Out[4]: [4, 5, 8, 9, 12, 13]
答案 2 :(得分:1)
这只是python中的一行代码。
解决方案1 :
[x for i in a for x in (2*i, 2*i + 1)]
解决方案2 (地图):
[rv for r in zip(list(map(lambda x: 2 * x, a)), list(map(lambda x: 2 * x + 1, a))) for rv in r]
输入:
>>> a = [2, 4, 6]
输出:
[4, 5, 8, 9, 12, 13]
答案 3 :(得分:0)
非常简单的方法:
l=[2,4,6]
r=[]
for i in l:
r.extend([2*i,2*i+1])
print(r)
[4, 5, 8, 9, 12, 13]
或者:
g=lambda i: (2*i,2*i+1)
[ e for i in l for e in g(i) ]
Out: [4, 5, 8, 9, 12, 13]