繁体   English   中英

如何创建一个从给定列表而不是索引中得出数字的列表?

[英]How to create a list that results a number from a given list, not the indices?

我在获取结果以生成列表中的整数时遇到麻烦,而不是它属于哪个索引。

#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]

您正在遍历索引范围。 而是遍历列表。

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]

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

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]
if ((myList[i])>5):
    #if the number is greater than 5, add to greaterList
    greaterList.append(i)

代替添加索引i ,而是添加值( myList[i] ):

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

对于oddList情况oddList如此。


注意:@Sukrit Kalra的解决方案是更可取的,但我在此保留它,以表明有多种解决方法。

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

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

要么

if ((myList[i])>5)

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

greaterList.append(i)

代替

greaterList.append(myList[i])

这一定是家庭作业或某个地方的课程吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM