This is a way to achieve what you want to do without 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="
")
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))
Output:
E
A
G
L
E
C
E
R
E
A
L
A
P
P
L
E
P
I
E
You can solve it similarily if using numpy - just remove the starting / ending 0, split at 0 and apply to normal and transposed data.
The method has a drawback - you need 0
between any non-word-forming characters in both directions to allow it to work (you can not use "EGG" starting ad "(E)agle" because you get GP
twice from it.