高级数组连接python
假设我有四个多维数组-高级数组连接python,python,arrays,pygame,concatenation,Python,Arrays,Pygame,Concatenation,假设我有四个多维数组- a = [["a","a","a"], ["a","a","a"], ["a","a","a"]] b = [["b","b","b"], ["b","b","b"], ["b","b","b"]] c = [["c","c","c"], ["c","c","c"], ["c","c","c"]] d = [["d","d","d"], ["d","d","d"], ["d","d","d"]] 我想把它们
a = [["a","a","a"],
["a","a","a"],
["a","a","a"]]
b = [["b","b","b"],
["b","b","b"],
["b","b","b"]]
c = [["c","c","c"],
["c","c","c"],
["c","c","c"]]
d = [["d","d","d"],
["d","d","d"],
["d","d","d"]]
我想把它们组合成一个数组,就像
total = [["a","a","a","b","b","b"],
["a","a","a","b","b","b"],
["a","a","a","b","b","b"],
["c","c","c","d","d","d"],
["c","c","c","d","d","d"],
["c","c","c","d","d","d"]]
我该怎么做
我这样做是为了生成spelunky风格的地图可能是这样的:
top = list(x+y for x,y in zip(a,b))
bottom = list(x+y for x,y in zip(c,d))
total = top + bottom
for r in total: print(r)
输出:
['a', 'a', 'a', 'b', 'b', 'b']
['a', 'a', 'a', 'b', 'b', 'b']
['a', 'a', 'a', 'b', 'b', 'b']
['c', 'c', 'c', 'd', 'd', 'd']
['c', 'c', 'c', 'd', 'd', 'd']
['c', 'c', 'c', 'd', 'd', 'd']
您可以使用一行指令来完成此操作,该指令混合了列表理解、zip指令和带有
+
[aa+bb for aa,bb in zip(a,b)] + [cc+dd for cc,dd in zip(c,d)]
全部代码
a = [["a","a","a"],
["a","a","a"],
["a","a","a"]]
b = [["b","b","b"],
["b","b","b"],
["b","b","b"]]
c = [["c","c","c"],
["c","c","c"],
["c","c","c"]]
d = [["d","d","d"],
["d","d","d"],
["d","d","d"]]
result = [aa+bb for aa,bb in zip(a,b)] + [cc+dd for cc,dd in zip(c,d)]
因为您正在谈论数组,所以使用numpy数组和
hstack()
和vstack()
:
这让你:
[['a' 'a' 'a' 'b' 'b' 'b']
['a' 'a' 'a' 'b' 'b' 'b']
['a' 'a' 'a' 'b' 'b' 'b']
['c' 'c' 'c' 'd' 'd' 'd']
['c' 'c' 'c' 'd' 'd' 'd']
['c' 'c' 'c' 'd' 'd' 'd']]
或者,使用连接()
:
假设地图的布局比2x2块更复杂:
from itertools import chain
from pprint import pprint
a = [["a","a","a"],
["a","a","a"],
["a","a","a"]]
b = [["b","b","b"],
["b","b","b"],
["b","b","b"]]
c = [["c","c","c"],
["c","c","c"],
["c","c","c"]]
d = [["d","d","d"],
["d","d","d"],
["d","d","d"]]
e = [["e","e","e"],
["e","e","e"],
["e","e","e"]]
f = [["f","f","f"],
["f","f","f"],
["f","f","f"]]
layouts = [
((a, b), (c, d)),
((a, b, c), (d, e, f)),
((a, b), (c, d), (e, f)),
]
for layout in layouts:
total = [list(chain(*row)) for lrow in layout for row in zip(*lrow)]
pprint(total)
输出:
[['a', 'a', 'a', 'b', 'b', 'b'],
['a', 'a', 'a', 'b', 'b', 'b'],
['a', 'a', 'a', 'b', 'b', 'b'],
['c', 'c', 'c', 'd', 'd', 'd'],
['c', 'c', 'c', 'd', 'd', 'd'],
['c', 'c', 'c', 'd', 'd', 'd']]
[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
['d', 'd', 'd', 'e', 'e', 'e', 'f', 'f', 'f'],
['d', 'd', 'd', 'e', 'e', 'e', 'f', 'f', 'f'],
['d', 'd', 'd', 'e', 'e', 'e', 'f', 'f', 'f']]
[['a', 'a', 'a', 'b', 'b', 'b'],
['a', 'a', 'a', 'b', 'b', 'b'],
['a', 'a', 'a', 'b', 'b', 'b'],
['c', 'c', 'c', 'd', 'd', 'd'],
['c', 'c', 'c', 'd', 'd', 'd'],
['c', 'c', 'c', 'd', 'd', 'd'],
['e', 'e', 'e', 'f', 'f', 'f'],
['e', 'e', 'e', 'f', 'f', 'f'],
['e', 'e', 'e', 'f', 'f', 'f']]
或者,同样地,使用
np.hstack()
和np.vstack()
非常感谢,这很好!我相应地修改了代码。谢谢-这太完美了
from itertools import chain
from pprint import pprint
a = [["a","a","a"],
["a","a","a"],
["a","a","a"]]
b = [["b","b","b"],
["b","b","b"],
["b","b","b"]]
c = [["c","c","c"],
["c","c","c"],
["c","c","c"]]
d = [["d","d","d"],
["d","d","d"],
["d","d","d"]]
e = [["e","e","e"],
["e","e","e"],
["e","e","e"]]
f = [["f","f","f"],
["f","f","f"],
["f","f","f"]]
layouts = [
((a, b), (c, d)),
((a, b, c), (d, e, f)),
((a, b), (c, d), (e, f)),
]
for layout in layouts:
total = [list(chain(*row)) for lrow in layout for row in zip(*lrow)]
pprint(total)
[['a', 'a', 'a', 'b', 'b', 'b'],
['a', 'a', 'a', 'b', 'b', 'b'],
['a', 'a', 'a', 'b', 'b', 'b'],
['c', 'c', 'c', 'd', 'd', 'd'],
['c', 'c', 'c', 'd', 'd', 'd'],
['c', 'c', 'c', 'd', 'd', 'd']]
[['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
['a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'c'],
['d', 'd', 'd', 'e', 'e', 'e', 'f', 'f', 'f'],
['d', 'd', 'd', 'e', 'e', 'e', 'f', 'f', 'f'],
['d', 'd', 'd', 'e', 'e', 'e', 'f', 'f', 'f']]
[['a', 'a', 'a', 'b', 'b', 'b'],
['a', 'a', 'a', 'b', 'b', 'b'],
['a', 'a', 'a', 'b', 'b', 'b'],
['c', 'c', 'c', 'd', 'd', 'd'],
['c', 'c', 'c', 'd', 'd', 'd'],
['c', 'c', 'c', 'd', 'd', 'd'],
['e', 'e', 'e', 'f', 'f', 'f'],
['e', 'e', 'e', 'f', 'f', 'f'],
['e', 'e', 'e', 'f', 'f', 'f']]