Это способ достичь того, что вы хотите делать без 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», потому что вы получаете [ 113] дважды от него.
Если Вы хотите протестировать, можно ли соединиться с веб-сервером, Вы могли бы также создать URL на основе имени хоста и номера порта и использования, что для создания URLConnection проверка результата (включая исключения) метода подключения должна сказать Вам, достижим ли веб-сервер.
Во-первых необходимо распознать, что у Вас есть потенциально конфликтующие требования; сокеты IP не время детерминированные. Самое быстрое можно когда-либо обнаруживать недостижимость, после прошедшего тайм-аута. Можно только обнаружить более быструю достижимость.
Принятие reachability/isReachable является Вашей реальной целью, Вы должны просто использовать простой сокет неблокирования IO как показано в средстве моделирования Ping Java, подключениях в качестве примера к сервису времени, но работали бы одинаково хорошо над 8 080.
Не уверенный, насколько практичный это.
Как насчет того, чтобы делать эквивалент traceroute (tracert на окнах) и после того как Вы получаете успех, можно продолжить двигаться.
В корпоративных сетях я видел, что ICMP (ping), заблокированный администраторами, НО обычно, tracert все еще, работает. Если можно выяснить быстрый способ сделать то, что делает tracert, который должен добиться цели?
Удачи!
Мое новое решение зависит с помощью a TimedSocket
(исходный код) с тайм-аутом на 3 000 мс при выполнении подключения.
Синхронизации:
testLocalHost()
testLAN()
Не может даже заставить их работать правильно:
testNoDNS()
testHaveDNS()
Если бы необходимо сделать это с серьезно большим количеством хостов в очень краткий промежуток времени, я рассмотрел бы использование инструмента как fping вместо этого - выходят из оболочки должностному лицу он и анализируют вывод, когда это возвращается. fping выполняет большое количество параллельных запросов сразу, таким образом, Вы могли теоретически проверить несколько тысяч хостов через минуту (я думаю, что предел 4096?)