迭代一个类中的列表

时间:2015-08-25 19:27:35

标签: python

我正在尝试遍历类中的列表,而只是将列表的第一个成员打印到控制台。如何打印每个元素?

class CodeManager(object):
    """Separates the input string into individual characters in a list"""

    characters = []

    def __init__(self, stringCode):
        self.stringCode = stringCode

    def LoopThroughList(self):

        self.characters = list(self.stringCode.upper())
        for chars in self.characters:
            return chars

然后我在我的主Python文件中创建一个类对象:

code = CodeManager.CodeManager("Hello my name is Callum")
print (code.LoopThroughList())

5 个答案:

答案 0 :(得分:2)

您在第一次迭代后返回:

for chars in self.characters:
        return chars # ends loop

如果要查看所有字符,请使用print或yield并迭代code.LoopThroughList()

for chars in self.characters:
        print(chars)

yield并将方法设为generator

 for chars in self.characters:
        yield chars

然后:

for ch in code.LoopThroughList():
    print(ch)

使用yield实际上允许您使用返回的每个字符,这可能更接近您在自己的代码中尝试的操作。

如果您只想查看新行上输出的每个字符,可以使用str.join:

self.characters = list(self.stringCode.upper())
        return "\n".join(self.characters)

您也不需要在self.stringCode.upper()上调用列表,您可以直接在字符串上进行迭代。

答案 1 :(得分:1)

你的循环是return第一个字符。 return语句将阻止循环的剩余迭代的执行。

您可能希望使用print代替return

def loop_through_list(self):
    self.characters = list(self.stringCode.upper())
    for char in self.characters:
        print(char)

用作:

code = CodeManager.CodeManager("Hello my name is Callum")
code.loop_through_list()

此外,您在characters = []中对class的定义非常无用。您正在阴影方法调用中的class属性。

答案 2 :(得分:0)

你正在返回,因此列表中的第一个元素。

class CodeManager(object):
    """Separates the input string into individual characters in a list"""

    characters = []

    def __init__(self, stringCode):
        self.stringCode = stringCode

    def LoopThroughList(self):
        self.characters = list(self.stringCode.upper())
        for chars in self.characters:
            print chars

code = CodeManager("Hello my name is Callum")
code.LoopThroughList()

答案 3 :(得分:0)

您可以使用list comprehension

def LoopThroughList(self):
    return [chars for chars in self.stringCode.upper()]

这将返回stringCode变量

中所有字符的列表

答案 4 :(得分:-1)

呀。列表理解只需稍加修改即可使用:

class CodeManager(object):
"""Separates the input string into individual characters in a list"""

    characters = []

    def __init__(self, stringCode):
        self.stringCode = stringCode
        self.characters = stringCode.upper()

    def LoopThroughList(self):
        return [chars for chars in self.stringCode.upper().split()]


code = CodeManager("Hello my name is Callum")
print (code.LoopThroughList())
  

[&#39; HELLO&#39;&#39; MY&#39;&#39; NAME&#39;&#39; IS&#39;&#39; CALUM&#39;] < / p>

或者如果你想要这个:

class CodeManager(object):

characters = []

def __init__(self, stringCode):
    self.stringCode = stringCode
    self.characters = stringCode.upper()

def LoopThroughList(self):
    return [chars for chars in self.stringCode.upper()]


code = CodeManager("Hello my name is Callum")
print (code.LoopThroughList())
  

[&#39; H&#39;,&#39; E&#39;,&#39; L&#39;,&#39; L&#39;,&#39; O&#39;,& #39; &#39;,&#39; M&#39;,&#39; Y&#39;,&#39; &#39;,&#39; N&#39;,&#39; A&#39;,&#39; M&#39;,&#39; E&#39;,&#39; &#39;,&#39;我&#39;,&#39; S&#39;,&#39; &#39;,&#39; C&#39;,&#39; A&#39;,&#39; L&#39;,&#39; L&#39;,&#39; U&#39;, &#39; M&#39;]

你的characters变量是一个类变量,而不是一个实例变量(存在差异)。