我正在尝试提取二维数组中的单词,因此我需要进行行和列检查,以便获得字符。
示例: 我有一个包含二维的数组,这张照片Click here中显示了该二维数组,这是存储该数组的代码。我已经将其尺寸调整为15x15
arr2 = np.array([my_list2])
arr2 = arr2.reshape(15,15)
问题是每次我提取字符时,它都不会给我苹果的a。
E
A
G
L
E
P
P
L
E
这是让我提取字符串的代码:
board_size = 15
print(arr2)
for i in range(board_size):
for j in range(board_size):
val = arr2[i,j]
if val != '0' :
print(val)
` 我需要的输出是能够显示鹰和苹果。
答案 0 :(得分:0)
这是一种无需numpy即可实现的目标的方法:
def print_non_0_len_ge_1(li):
"""removes 0 from front/back of line, prints rest of line if > 1 consecutive letter
splitting at 0 between words."""
for line in li:
no_zero = ''.join(line).strip("0").split("0")
for p in no_zero:
if len(p)>1:
print(*p,sep="\n")
print("")
data = [['0', '0', '0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', 'E', 'A', 'G', 'L', 'E', '0', '0'],
['0', '0', '0', '0', 'P', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', 'P', '0', 'P', '0', '0', '0'],
['0', '0', '0', '0', 'L', '0', 'I', '0', '0', '0'],
['0', '0', '0', 'C', 'E', 'R', 'E', 'A', 'L', '0'],
['0', '0', '0', '0', '0', '0', '0', '0', '0', '0']]
# apply to lines
print_non_0_len_ge_1(data)
# apply to transposed data to get the columns
print_non_0_len_ge_1(zip(*data))
输出:
E
A
G
L
E
C
E
R
E
A
L
A
P
P
L
E
P
I
E
如果使用numpy,也可以类似地解决它-只需删除开始/结尾0,在0处拆分并应用于法线和转置数据即可。
该方法有一个缺点-您需要在两个方向上的所有非单词形式字符之间使用0
才能使其正常工作(您不能使用“ EGG”开头的广告“(E)agle”),因为两次获得GP
。
答案 1 :(得分:0)
在这种情况下,您可以遍历行和列(使用索引)并使用列表推导删除0
。考虑以下示例
a = np.array([['T','E','S','T'],
['0','0','0','E'],
['0','0','0','S'],
['0','0','0','T']])
height,width = a.shape
for i in range(height):
word = ''.join([j for j in a[i] if j!='0'])
if len(word)>=2: print(word)
for i in range(width):
word = ''.join([j for j in a[:,i] if j!='0'])
if len(word)>=2: print(word)
输出:
TEST
TEST
a
是硬编码的值,例如为了清楚起见,请注意a.shape
的用法比魔术数字更优雅。
正如评论中指出的那样,它有一个原始形式的缺陷,为避免该问题,for
的外观应如下:
for i in range(height)
words = ''.join(a[i]).split('0')
words = [i for i in words if len(i)>=2]
if words: print(words)
for i in range(width):
words = ''.join(a[:,i]).split('0')
words = [i for i in words if len(i)>=2]
if words: print(words)
请注意,现在words
是列表,此方法还可以在一行或一列中检测到两个或多个单词。