我有一个充满IP地址的列表。我想遍历列表并打印每个IP地址。当我尝试这样做时:
def printList(theList):
for item in theList:
print item
输出如下:
['8.0.226.5']
['8.0.247.5']
['8.0.247.71']
['8.0.249.28']
['8.0.249.29']
我已尝试过所有内容,包括循环中的“print item [0]”。我做错了什么?
答案 0 :(得分:6)
列表中的每个项目本身都是一个单例列表。可能没有理由这样做 - 如果你不能命名一个,那么去除它们(使用re.find
超过re.findall
或从re.findall
返回的列表中返回一个项目),它们只是多余的,在这种情况下会造成麻烦。
无论如何,print item[0]
应该在打印列表中的单个元素时起作用,与列表的str()
不同,它不会首先通过repr
运行项目(这会导致引号,如果字符串中有任何字符,将转义不可打印的字符)。一旦你摆脱了多余的单例列表,print '\n'.join(items)
也会起作用。
如果theList
中有空列表,则代码会引发错误。如果recentFile
中的某行不包含任何格式化为IP的行,则returnIP
将返回一个空列表,如果comparisonFile
中有任何行(顺便说一下:你)在开头使用描述性名称打开它,但在chechMatch
中没有描述性名称的情况下一次又一次地打开它)也不包含IP地址,你将得到另一个空列表,当然等于作为参数传递的空列表ip
。因此,对于recentFile
中的非IP名称,将添加空列表。如果您从returnIP
返回字符串而不是单个列表,则可以避免整个麻烦;当前行中没有IP时使用None
,如果compareFiles
中没有IP,则跳过检查/追加returnIP
会返回None
。
答案 1 :(得分:0)
我认为 theList 不是IP列表,而是IP列表列表(每个列表包含1个元素)。
问题的另一个原因是你有一个带有覆盖的 str 方法的IP类,它会像那样打印出来。