-5

我正在尝试编写一个函数,该函数接受一个列表的输入和一个 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
4

5 回答 5

1

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

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 循环会更简单。

于 2013-10-08T23:46:41.757 回答
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)
于 2013-10-08T23:48:56.293 回答
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
于 2013-10-08T23:57:03.890 回答
0

我将只回答“我哪里出错了?” 问题。

  1. 你有两个不同的问题。它们属于两个不同的功能,您将相互独立地进行调试。
  2. 您已选择使用“while 循环”作为解决方案的一部分。它可能是解决方案的一部分,但它可能是一个糟糕的方法。也许它对你的任何一个、一个或两个问题都没有好处。
  3. 你是 python 的新手,也许是一般的编程。没有错。祝你好运。在尝试任何解决方案之前,您应该学会将问题简化为最简单的形式。通常对于您遇到的任何问题,您都可以找到一些易于解决的小问题。一个一个地解决它们,然后将小问题的解决方案整合到原始问题的解决方案中。
  4. 在这两个问题中,您可能会发现在 python 中,“for element in iterable:”是首选。例如,“for word in words:”、“for item in alist”等。
于 2013-10-08T23:58:17.187 回答
-1
nList.append(myList[element])

你真的不应该命名索引元素,这就是你的困惑所在

于 2013-10-08T23:45:40.660 回答