0

我无法让结果生成列表中的整数,而不是它属于哪个索引。

#this function takes, as input, a list of numbers and an option, which is either 0 or 1.
#if the option is 0, it returns a list of all the numbers greater than 5 in the list
#if the option is 1, it returns a list of all the odd numbers in the list
def splitList(myList, option):
    #empty list for both possible options
    oddList = []
    greaterList = []
    #if option is 0, use this for loop
    if int(option) == 0:
        #create for loop the length of myList
        for i in range(0, len(myList)):
            #check if index is greater than 5
            if ((myList[i])>5):
                #if the number is greater than 5, add to greaterList
                greaterList.append(i)
        #return results
        return greaterList
    #if option is 1, use this for loop
    if int(option) == 1:
        #create for loop the length of myList
        for i in range(0, len(myList)):
            #check if index is odd by checking if it is divisible by 2
            if ((myList[i])%2!=0):
                #if index is not divisible by 2, add the oddList
                oddList.append(i)
        #return results
        return oddList

我收到的结果如下:

>>>splitList([1,2,6,4,5,8,43,5,7,2], 1)
   [0, 4, 6, 7, 8]

我试图让结果为 [1, 5, 43, 5, 7]

4

4 回答 4

2

您正在迭代索引的范围。而是迭代列表。

for i in myList:
    #check if index is greater than 5
    if i >5:
        #if the number is greater than 5, add to greaterList
        greaterList.append(i)

所以,你的代码被重写为(有一些小的改动)

def splitList(myList, option):
    final_list = []
    if int(option) == 0:
        for i in myList:
            if i > 5:
                final_list.append(i)
    elif int(option) == 1:
        for i in myList:
            if i%2 != 0:
                final_list.append(i)
    return final_list

你可以通过这样做来减少它

def splitList(myList, option):
    if int(option) == 0:
        return [elem for elem in myList if elem > 5]
    elif int(option) == 1:
        return [elem for elem in myList if elem % 2 != 0]

输出 -

>>> splitList([1,2,6,4,5,8,43,5,7,2], 1)
[1, 5, 43, 5, 7]
于 2013-10-09T17:13:46.637 回答
2

列表推导极大地简化了您的代码。

def split_list(xs, option):
    if option:
        return [x for x in xs if x % 2]
    else:
        return [x for x in xs if x > 5]
于 2013-10-09T17:16:43.380 回答
1
if ((myList[i])>5):
    #if the number is greater than 5, add to greaterList
    greaterList.append(i)

不添加 index i,而是添加值 ( myList[i]):

if ((myList[i])>5):
    #if the number is greater than 5, add to greaterList
    greaterList.append(myList[i])

同样的事情oddList


注意:@Sukrit Kalra 的解决方案更可取,但我留下这个是为了表明有多种方法可以解决这个问题。

于 2013-10-09T17:13:34.233 回答
0

仔细查看您的 .append() 命令...在您使用的比较中:

if ((mylList[i])%2!=0) 

或者

if ((myList[i])>5)

...但是当您将其放入列表时,您只是在使用

greaterList.append(i)

代替

greaterList.append(myList[i])

这一定是某处的家庭作业或课程?

于 2013-10-09T17:17:18.153 回答