Сортировка IP-адресов в разных форматах - PullRequest
0 голосов
/ 05 октября 2018

Я пытаюсь получить:

['192.168.70.19 (tcp/1433)']
['192.168.70.223 (tcp/1051),192.168.70.19 (tcp/1025), 192.168.70.245 (tcp/1051)'] 
['192.168.70.19 (tcp/3389),192.168.70.223 (tcp/3389)']

до

['192.168.70.19 (tcp/1433)']
['192.168.70.19 (tcp/1025),192.168.70.223 (tcp/1051), 192.168.70.245 (tcp/1051)'] 
['192.168.70.19 (tcp/3389),192.168.70.223 (tcp/3389)']

Это мой код, это неправильно.У меня проблемы с сортировкой IP-адреса из-за желания сохранить часть TCP.У кого-нибудь есть лучшее предложение или решение для этого.Любые идеи будут оценены.

import re
a=['192.168.70.19 (tcp/1433)', '192.168.70.223 (tcp/1051),192.168.70.19 (tcp/1025),192.168.70.245 (tcp/1025)', '192.168.70.19 (tcp/3389),192.168.70.223 (tcp/3389)']


for z in a:
    if z.find(','):
        #removes tcp part (but I want to keep)        
        #b = re.sub(r'\(.*?\)', '', z)

        #I can sort the IP with this, but it doesnt have the tcp part.
        #z.sort(key=lambda s: map(int, s.split('(')[0].split('.')))

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Вы можете использовать следующее понимание списка:

[','.join(sorted(i.split(','), key=lambda s: tuple(map(int, s.split()[0].split('.'))))) for i in a]

, чтобы при следующем вводе (обратите внимание, что я изменил 192.168.70.19 в вашем примере ввода на 192.168.70.39, чтобы продемонстрировать, что IP-адреса отсортированы по номерам):

a=['192.168.70.19 (tcp/1433)',
   '192.168.70.223 (tcp/1051),192.168.70.39 (tcp/1025),192.168.70.245 (tcp/1025)',
   '192.168.70.19 (tcp/3389),192.168.70.223 (tcp/3389)']

вышеприведенное понимание списка вернет:

['192.168.70.19 (tcp/1433)',
 '192.168.70.39 (tcp/1025),192.168.70.223 (tcp/1051),192.168.70.245 (tcp/1025)', 
 '192.168.70.19 (tcp/3389),192.168.70.223 (tcp/3389)']`
0 голосов
/ 05 октября 2018

Вот решение без регулярных выражений

[','.join(sorted(x.split(','), key= lambda x: x.split()[0])) for x in a]

Чтобы отсортировать комбинацию IP + TCP, используйте первую часть этого кортежа для сортировки по ip addr

output:

['192.168.70.19 (tcp/1433)', 
'192.168.70.19 (tcp/1025),192.168.70.223 (tcp/1051),192.168.70.245 (tcp/1025)', 
'192.168.70.19 (tcp/3389),192.168.70.223 (tcp/3389)']
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...