在循环中理解这个问题

时间:2013-10-08 23:42:46

标签: python

我试图写一个函数,它接受一个列表的输入和一个0或1的选项。如果它是0,我想返回一个大于绝对值的元素列表5.如果是选项1,我想返回一个元素列表是奇数。我也想使用while循环。我哪里错了?

def splitList2(myList, option):
    nList = []
    element = 0 
    while element < len(myList):
        if option == 0:
            if abs(element) > 5:
                nList.append(element)
        elif option == 1:
            if element % 2:
                nList.append(element)
        element = element + 1
    return nList

5 个答案:

答案 0 :(得分:1)

element是一个索引,而不是来自myList的元素。我会将您当前的element变量重命名为index,然后在while循环的顶部添加element = myList[index]

def splitList2(myList, option):
    nList = []
    index = 0 
    while index < len(myList):
        element = myList[index]
        if option == 0:
            if abs(element) > 5:
                nList.append(element)
        elif option == 1:
            if element % 2:
                nList.append(element)
        index = index + 1
    return nList

当然,在这里使用for element in myList循环代替你的while循环会更简单。

答案 1 :(得分:0)

您正在使用element作为元素索引的名称,这令人困惑。事实上,稍后您检查/追加索引而不是myList中的相应元素!

替代版本:

def splitList2(myList, option):
    nList = []
    n = 0 
    while n < len(myList):
    element = myList[n]
        if option == 0:
            if abs(element) > 5:
                nList.append(element)
        elif option == 1:
            if element % 2:
                nList.append(element)
        element = element + 1
    return nList

while也不是此类任务的最佳选择。我假设您出于教育原因使用while尝试执行此操作。然而,更多的Pythonic方式是:

def splitList2(myList, option):

    options = {
        0: lambda n: abs(n) > 5,
        1: lambda n: n % 2
    }

    return filter(options[option], nList)

答案 2 :(得分:0)

为什么不为两个案例创建两个列表,并在没有任何索引变量的情况下迭代给定列表?

def splitList2(myList):
    list1 = []
    list2 = []
    for element in myList:
        if abs(element) > 5:
            list1.append(element)
        if element & 1: # check the 0 bit
            list2.append(element)
return list1, list2

答案 3 :(得分:0)

我只会回答“我哪里出错?”问题

  1. 你有两个不同的问题。属于两个不同的功能,您将彼此独立调试。
  2. 您选择使用“while循环”作为解决方案的一部分。它可能是解决方案的一部分,但它可能是一个糟糕的方法。也许这对你的一个,一个或两个问题都有好处。
  3. 你是python的新手,也许是一般的编程。没有错。祝好运。在尝试任何解决方案之前,您应该学会将问题简化为最简单的形式。通常对于您遇到的任何问题,您都可以找到一些容易解决的小问题。逐个解决它们,然后将解决方案与小问题集成到原始问题的解决方案中。
  4. 在两个问题中的每个问题中,您可能会发现在python中,'for iterable:'中的元素是首选。例如,'for words in words:','for item in alist'等

答案 4 :(得分:-1)

nList.append(myList[element])

你真的不应该为索引元素命名,这就是你的混淆来自