从循环输出生成列表

2024-09-24 22:29:07 发布

您现在位置:Python中文网/ 问答频道 /正文

data = ['network 10.185.16.64 255.255.255.224','network 55.242.33.0 255.255.255.0','network 55.242.154.0 255.255.255.252']

pref_network_find = re.findall('(\S+\s+255.255.255.\w+)',str(data))

mydict = {"255.255.255.0":24,"255.255.255.128":25,"255.255.255.192":26,"255.255.255.224":27,"255.255.255.240":28,"255.255.255.248":29,"255.255.255.252":30}

for i in pref_network_find:
 splitlines = i.split()
 for word in splitlines:
    if word in mydict:
        i = i.replace(word,str(mydict[word]))
        pref = print (i)
listi = []
for line in pref_network_find:
   listi.append(i)
print (listi)

10.185.16.64 27
55.242.33.0 24
55.242.154.0 30
['55.242.154.0 30', '55.242.154.0 30', '55.242.154.0 30']

Process finished with exit code 0

我想把['55.242.154.0 30', '55.242.33.0 24', '10.185.16.64 27']作为list1的结尾,但是我不能理解我的错误。你能帮我吗?你知道吗


Tags: inrefordatanetworkfindmydictword
3条回答

很明显,它会在最后打印30,因为你的代码

for i in pref_network_find:
 splitlines = i.split()
 for word in splitlines:
    if word in mydict:
        i = i.replace(word,str(mydict[word]))
        pref = print (i)

我行刑后30岁。你用的是旧的变量'i'就像这样

for line in pref_network_find:
   listi.append(i)

所以是的,代码做得很好,我是30,它是附加30到你的结果。你知道吗

正确的代码是这样的。你知道吗

import re

data = ['network 10.185.16.64 255.255.255.224','network 55.242.33.0 255.255.255.0','network 55.242.154.0 255.255.255.252']
pref_network_find = re.findall('(\S+\s+255.255.255.\w+)',str(data))
mydict = {"255.255.255.0":24,"255.255.255.128":25,"255.255.255.192":26,"255.255.255.224":27,"255.255.255.240":28,"255.255.255.248":29,"255.255.255.252":30}
listi = []
for i in pref_network_find:
 splitlines = i.split()
 for word in splitlines:
    if word in mydict:
        i = i.replace(word,str(mydict[word]))
        pref = print (i)
        listi.append(i)

print (listi)

如果我在这里错了,请纠正我,也许你想要别的东西,然而,这是我对你的问题的理解。你知道吗

您的代码是错误的,因为您在此处附加了错误的索引i

for line in pref_network_find:
    listi.append(i)

我们在上一个循环的i = 55.242.154.0中有最后一个值。您应该使用line而不是i,或者直接在for循环中追加

data = ['network 10.185.16.64 255.255.255.224','network 55.242.33.0 255.255.255.0','network 55.242.154.0 255.255.255.252']

pref_network_find = re.findall('(\S+\s+255.255.255.\w+)',str(data))

mydict = {"255.255.255.0":24,"255.255.255.128":25,"255.255.255.192":26,"255.255.255.224":27,"255.255.255.240":28,"255.255.255.248":29,"255.255.255.252":30}

listi = []

for i in pref_network_find:
    splitlines = i.split()
    for word in splitlines:
        if word in mydict:
            listi.append(i.replace(word, str(mydict[word])))

print(listi)

您不需要使用regex获得初始拼接和连接的ip;相反,只需使用str.split()

import re
data = ['network 10.185.16.64 255.255.255.224','network 55.242.33.0 255.255.255.0','network 55.242.154.0 255.255.255.252']
mydict = {"255.255.255.0":24,"255.255.255.128":25,"255.255.255.192":26,"255.255.255.224":27,"255.255.255.240":28,"255.255.255.248":29,"255.255.255.252":30}

final_list = sorted(['{} {}'.format(b, mydict[c]) for a, b, c in [i.split() for i in data]], key=lambda x:map(int, re.split('\.|\s', x)), reverse=True)

输出:

['55.242.154.0 30', '55.242.33.0 24', '10.185.16.64 27']

相关问题 更多 >