這是我的代碼:
b = [6 * [1, 3, 4, 2],
4 * [2, 1, 4, 3],
3 * [3, 4, 2, 1],
4 * [4, 2, 1, 3],
4 * [4, 3, 2, 1],
]
它回傳一個陣列,其中第一行有 6X4=24 個元素,第二行有 4X4=16 等...
我想要實作的是多次添加完全相同的行,例如:
1, 3, 4, 2
1, 3, 4, 2
1, 3, 4, 2
1, 3, 4, 2
1, 3, 4, 2
1, 3, 4, 2 #6 tines the first line
2, 1, 4, 3
2, 1, 4, 3
2, 1, 4, 3
2, 1, 4, 3 # 4 times the second
..........
但當然不要一次又一次地復制同一行
uj5u.com熱心網友回復:
嘗試:
b = [
*[[1, 3, 4, 2] for _ in range(6)],
*[[2, 1, 4, 3] for _ in range(4)],
*[[3, 4, 2, 1] for _ in range(3)],
*[[4, 2, 1, 3] for _ in range(4)],
*[[4, 3, 2, 1] for _ in range(4)],
]
print(b)
印刷:
[
[1, 3, 4, 2],
[1, 3, 4, 2],
[1, 3, 4, 2],
[1, 3, 4, 2],
[1, 3, 4, 2],
[1, 3, 4, 2],
[2, 1, 4, 3],
[2, 1, 4, 3],
[2, 1, 4, 3],
[2, 1, 4, 3],
[3, 4, 2, 1],
[3, 4, 2, 1],
[3, 4, 2, 1],
[4, 2, 1, 3],
[4, 2, 1, 3],
[4, 2, 1, 3],
[4, 2, 1, 3],
[4, 3, 2, 1],
[4, 3, 2, 1],
[4, 3, 2, 1],
[4, 3, 2, 1],
]
uj5u.com熱心網友回復:
你也可以把它放在一行中
b = 6*[[1, 3, 4, 2]] 4*[[2, 1, 4, 3]] 3*[[3, 4, 2, 1]] 4*[[4, 2, 1, 3]] 4* [[4, 3, 2, 1]])
print(b)
uj5u.com熱心網友回復:
如果您不想更改b創建方式,只需兩個步驟。
import numpy as np
B = np.concatenate(b).ravel()
b = np.reshape(B,(21,4))
uj5u.com熱心網友回復:
您可以使用串列推導的串列推導來重復y您的x串列(分別從bb和aa)
符號有點奇怪,“中心”是外部元素,然后向右擴展。
優點:不需要 numpy,它適用于任何大小的條目,不像其他答案“編碼”行
aa=[[1, 3, 4, 2],
[2, 1, 4, 3],
[3, 4, 2, 1],
[4, 2, 1, 3],
[4, 3, 2, 1]]
bb=[6,4,3,4,4]
xx = [x for x,y in zip(aa,bb) for _ in range(y) ]
回傳:[[1, 3, 4, 2], [1, 3, 4, 2], [1, 3, 4, 2], [1, 3, 4, 2], [1, 3, 4, 2], [1, 3, 4, 2], [2, 1, 4, 3], [2, 1, 4, 3], [2, 1, 4, 3], [2, 1, 4, 3], [3, 4, 2, 1], [3, 4, 2, 1], [3, 4, 2, 1], [4, 2, 1, 3], [4, 2, 1, 3], [4, 2, 1, 3], [4, 2, 1, 3], [4, 3, 2, 1], [4, 3, 2, 1], [4, 3, 2, 1], [4, 3, 2, 1]]
uj5u.com熱心網友回復:
它可以通過將因子和子串列配對并將它們相乘來系統地完成。然后扁平化串列。
這是一個hacky方式
b = [[1, 3, 4, 2],
[2, 1, 4, 3],
[3, 4, 2, 1],
[4, 2, 1, 3],
[4, 3, 2, 1],
]
factors = [6, 4, 3, 4, 4]
print(sum(f*[l] for f, l in zip(factors, b), []))
扁平化部分(串列鏈)已經完成,sum( , [])但性能不高(并且為此而設計)......但在我看來,對于動態測驗一些小東西仍然有用。串列鏈接必須使用 ie完成itertools.chain。這里有一個例子
import itertools as it
...
list(it.chain.from_iterable(f*[l] for f, l in zip(factors, b)))
# or (for many iterators)
list(it.chain(*(f*[l] for f, l in zip(factors, b))))
# or with repeat
list(it.chain.from_iterable(it.starmap(it.repeat, zip(b, factors))))
# or (another) with repeat
list(it.chain.from_iterable(map(it.repeat, b, factors))
# or ...
list(it.chain.from_iterable(map(list.__mul__, ([i] for i in b) , factors)))
# or with reduce
import functools as fc
list(fc.reduce(lambda i, j: i j, zip(b, factors)))
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/475401.html
標籤:Python 数组 python-3.6
上一篇:Bash腳本將現有陣列元素附加到陣列中的回圈分割空間(空格?)
下一篇:總和為k的子陣列的最小大小
