我正在使用Python进行练习,我在使用count var附加IP地址时遇到问题。
大量解释。 首先,这是代码:
if c == 4:
temp = IP
for address in IP:
count = temp.count(address)
c = str(count)
a = address
while count != 0:
temp.remove(address)
count -= 1
c = a + "|" + c
temp.append(c)
print temp
func(IP)
好...这样: 每当用户输入4时,该函数创建列表'temp',并将其与列表'IP'进行比较,该列表就像主列表(我不熟悉英语编码快捷键),该函数从程序本身接收。 然后,它创建一个循环,在其中创建一个count var来计算IP地址在临时列表(IP列表)中的显示次数,然后将count var转换为字符串并将地址存储在var a中。 毕竟,它创建了另一个循环来删除临时列表中该地址的所有实例,最后,它会在其中附加带有字符数的相同地址。
从逻辑上讲,一切都很好不是吗? (至少我是这么认为的......) 但如果我插入,则输出为:10.0.0.1,10.0.0.3,10.0.0.3,10.0.0.5 -['10.0.0.5','10 .0.0.1 | 1','10 .0.0.3 | 2 | 1']
如您所见,它应该是:['10 .0.0.5 | 1','10 .0.0.1 | 1','10 .0.0.3 | 2']对吗?
那么问题是什么? 我真的需要帮助这个...希望我解释得很好! 非常感谢你们!
答案 0 :(得分:1)
你的代码显示了一些关于Python和编程的误解,所以让我看一下,看看我是否可以帮助你。
当您指定temp = IP
时,我假设您正在尝试制作IP
的副本,但它们仍然是同一个。对temp的任何更改也是对IP
的更改。这意味着,当您更改IP
时,您正在迭代temp
时添加和删除项目。
在Python中,有些东西是可变的,比如列表和词典。当你将一些可变的东西传递给一个函数并在函数内部进行更改时,它也会在函数外部受到影响。当你设置相同的东西时,你现在有两个相同的列表或字典的名称。如果某些东西是不可变的,比如一个集合或一个整数,那就不会发生这种情况。
您在代码中使用变量来存储中间值,但不要以使代码更具可读性的方式命名它们。你需要跟踪多少事情?在您的代码中,您需要跟踪大约6个变量。这是要记住的很多事情。此外,变量名称也无济于事。什么是c
?它是一个用户输入,计数为另一个点的字符串,另一个点的结果字符串。这肯定会让您和阅读代码的任何人感到困惑。尝试使用描述性变量名称,仅在使代码更清晰时使用中间值,并且不要将相同的变量重用于完全不同的任务。
address_counts = {} # Create an empty dictionary to map addresses to the number of times they occur
for address in IP:
if address not in address_counts:
address_counts[address] = 1 # The first time we see an address set the count to 1
else:
address_counts[address] += 1 # The next time we see something, add 1 to the count
for address, count in address_count.iteritems(): # Python 2 specific, loops over each key and value in a dictionary. In Python 3, use .items()
print address + '|' + str(count)