我试图写一个函数,它接受一个列表的输入和一个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
答案 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)
我只会回答“我哪里出错?”问题
答案 4 :(得分:-1)
nList.append(myList[element])
你真的不应该为索引元素命名,这就是你的混淆来自