来自带有while循环的输入的Python函数子列表

时间:2019-04-28 09:55:17

标签: python

我的问题是:编写一个函数,子列表,将数字列表作为参数。在函数中,使用while循环返回输入列表的子列表。子列表应包含与原始列表相同的值,直至达到数字5(不应包含数字5)。

我修改它,有时我会得到部分正确的问题。

def sublist(x):
    a = [int(x) for x in input()]
    while x < 5:
        x = x + 1
    return(x)

10 个答案:

答案 0 :(得分:2)

尝试:

import itertools

def sublist(x):
    return list(itertools.takewhile(lambda n: n != 5, x))

更新:如果这是一个家庭作业问题,那么我的答案对您不起作用-但nor should we just give you an answer对您不起作用,因此,请查看whilebreak 。考虑创建一个空列表开始,向其中添加内容,直到需要停止,然后返回它。

答案 1 :(得分:0)

如果您希望编写一个将列表中的每个元素都取到数字5的函数(例如[1、2、3、4、5]-> [1、2、3、4]),则可以这样做:

def sublist(input_list):
    output_list = []
    index = 0
    while index < len(input_list):
        if input_list[index] != 5:
            output_list.append(input_list[index])
            index += 1
        else:
            break
    return output_list

到达5时,while循环中断。在此之前,每个值都被添加到一个新列表中,然后由该函数返回。

更新:在检查索引的条件小于输入列表的长度时更改

答案 2 :(得分:0)

您似乎不明白这个问题。

  

编写一个函数sublist,该函数以数字列表作为参数。

这意味着如果我们有这个:

def sublist(x):
    pass

然后x将是一个list不是,例如您的数字。另外,您无需对input()做任何事情;您已经有了列表,因此根本不需要该行。

  

在函数中,使用while循环返回输入列表的子列表。

好吧,Python具有一个名为"generators"的功能,可让您非常轻松地做到这一点!我要作弊,使用while循环。相反,我将使用for循环:

def sublist(x):
    for num in x:
        if num == 5:
            # we need to stop; break out of the for loop
            break
        # output the next number
        yield num

现在此代码有效:

>>> for num in sublist([3, 4, 2, 5, 6, 7]):
...     print(num)
3
4
2
>>> 

但是,sublist从技术上讲不会返回 list 。相反,让我们使用一些MAGIC来使它们返回列表:

make

from functools import wraps
return_list = lambda f:wraps(f)(lambda *a,**k:list(f(*a,**k)))

(您不需要知道它是如何工作的。)现在,当我们定义函数时,我们用return_list decorate来使它成为list的输出:

@return_list
def sublist(x):
    for num in x:
        if num == 5:
            # we need to stop; break out of the for loop
            break
        # output the next number
        yield num

现在这也可行:

>>> print(sublist([3, 4, 2, 5, 6, 7]))
[3, 4, 2]
>>>

万岁!

答案 3 :(得分:0)

如果您想使用while循环来检查数字值,则最好从输入列表中创建一个generator并使用next()对其进行迭代:

def sublist(x):
    sub = []
    x = (num for num in x)  # create a generator
    num = next(x, 5)  
    while num != 5:
        sub.append(num)
        num = next(x, 5)  # iterate
    return sub

x = [1, 3, 4, 5, 1, 2, 3]
sublist(x)

>>> [1, 3, 4]

答案 4 :(得分:0)

def sublist(x):
    accum = 0
    sub = []
    while accum < len(x):
        if x[accum]== 5:
            return sub
        else:
            sub.append(x[accum])
        accum = accum +1
    return sub

x = [1, 3, 4, 5,6,7,8]
print(sublist(x))

答案 5 :(得分:0)

def sublist(lst):


    output_list = []
    for i in lst:
        while i==5:
            return output_list
        output_list.append(i)
    return output_list

答案 6 :(得分:0)

我就是这样。

def sublist(x):
count = 0
new = []
if 5 in x:
    while(x[count] != 5):
        new.append(x[count])
        count += 1
    return new
    
else:
    return x

答案 7 :(得分:0)

def sublist(num):
    list = []
    for x in num:
        if x == 5:
            break
        while x != 5:
            list.append(x)
            break
    return list

num = [1,2,4,6,7,8,9,5,1,3,4]
print(sublist(num))

答案 8 :(得分:-1)


num = [1, 2, 3, 17, 1, 3, 5, 4, 3, 7, 5, 6, 9]
new = []
def check_nums(x):
    idx = 0
    while idx < len(x) and x[idx] != 7:
        print(idx)
        new.append(x[idx])
        idx += 1
    print(idx)
    return new
print(check_nums(num))

答案 9 :(得分:-1)

def sublist(a):
    i=0;
    lst=[];
    while(i<len(a) and a[i]!=5):
        lst.append(a[i]);
        i+=1;
    return lst;