更新
要摆脱for 循环(我使用它是因为使用break 语句会使程序更高效),您可以使用itertools.takewhile() 方法来执行操作作为列表理解中的break 语句,从而使程序更高效(我测试了两个版本的代码,一个使用itertools.takewhile() 方法,一个没有;前者结果更快) :
import numpy as np
from itertools import groupby, takewhile
a = np.array([[193, 64, 64, 139, 180, 180, 104, 152, 69, 22, 192, 92],
[ 1, 36, 156, 152, 152, 37, 46, 143, 141, 114, 25, 134],
[110, 96, 52, 53, 35, 147, 3, 116, 20, 11, 137, 5]])
result = [[k[0] for i, k in takewhile(lambda x: x[0] != 5, enumerate(groupby(row)))] for row in a]
print(np.array(result))
输出:
[[193 64 139 180 104]
[ 1 36 156 152 37]
[110 96 52 53 35]]
(使用for 循环)
您可以尝试使用内置的enumerate() 函数和itertools.groupby() 方法:
import numpy as np
from itertools import groupby
a = np.array([[193, 64, 64, 139, 180, 180, 104, 152, 69, 22, 192, 92],
[ 1, 36, 156, 152, 152, 37, 46, 143, 141, 114, 25, 134],
[110, 96, 52, 53, 35, 147, 3, 116, 20, 11, 137, 5]])
def get_unique(a, amt):
for row in a:
r = []
for i, k in enumerate(groupby(row)):
if i == amt:
break
r.append(k[0])
yield r
for row in get_unique(a, 5):
print(row)
输出:
[193, 64, 139, 180, 104]
[1, 36, 156, 152, 37]
[110, 96, 52, 53, 35]
省略函数:
import numpy as np
from itertools import groupby
a = np.array([[193, 64, 64, 139, 180, 180, 104, 152, 69, 22, 192, 92],
[ 1, 36, 156, 152, 152, 37, 46, 143, 141, 114, 25, 134],
[110, 96, 52, 53, 35, 147, 3, 116, 20, 11, 137, 5]])
result = []
for row in a:
r = []
for i, k in enumerate(groupby(row)):
if i == 5:
break
r.append(k[0])
result.append(r)
print(np.array(result))
输出:
[[193 64 139 180 104]
[ 1 36 156 152 37]
[110 96 52 53 35]]