2011-04-21 166 views
5

我有一个充满IP地址的列表。我想遍历列表并打印每个IP地址。当我尝试这样做:Python:打印一个没有括号和单引号的列表?

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'] 

我已经试过一切,包括在循环“[0]打印项目”。我究竟做错了什么?

+9

真的吗?当您尝试“打印项目[0]”时发生了什么? – 2011-04-21 21:38:19

+0

IndexError:列表索引超出范围 – Dan 2011-04-21 21:43:04

+3

您能告诉我们这个列表是什么样子吗? – 2011-04-21 21:43:42

回答

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,如果returnIP返回None,则跳过检查/附加compareFiles

+0

我想通了。显然,在列表顶部有一个空白项目,所以它停在那里。谢谢你的帮助!编辑:我不是一个成员,或者我会upvote你:( – Dan 2011-04-21 21:58:14

+0

@丹:增加了详细的解释为什么会发生,并建议如何解决它。有点晚,但如果有任何帮助... :) – delnan 2011-04-21 22:02:25

+0

谢谢!对于比较文件的事情,我最初引用它后来,但由于某些原因,它不会工作时使用变量名,所以我尝试用内联打开函数替换它,它工作正常。我不知道为什么会发生这种情况。我可能会尝试重新创建问题并尝试找出问题。 – Dan 2011-04-21 22:07:49

0

我认为theList不是IP列表,而是IP列表(其中每个列表都带有1个元素)。

问题的另一个原因是你有一个IP类,覆盖str方法,打印它就像那样。