Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python 3如何将项目从另一个列表附加到列表中_Python_List_Data Structures - Fatal编程技术网

python 3如何将项目从另一个列表附加到列表中

python 3如何将项目从另一个列表附加到列表中,python,list,data-structures,Python,List,Data Structures,我正试图将每个不是6的数字放入一个名为valid的单独列表中。根据我目前对循环的了解,我尝试在nums中的每个元素上循环并附加到“valid”中,但它并没有返回所有的数字!=6不是6,即使我先追加值,然后删除值。我当前的python版本是3.6 def sum6(nums): valid = [] for item in nums: if item != 6: valid.append(item) nums.rem

我正试图将每个不是6的数字放入一个名为valid的单独列表中。根据我目前对循环的了解,我尝试在nums中的每个元素上循环并附加到“valid”中,但它并没有返回所有的数字!=6不是6,即使我先追加值,然后删除值。我当前的python版本是3.6

def sum6(nums):
    valid = []

    for item in nums:
        if item != 6:
            valid.append(item)
            nums.remove(item)
        else:
            pass
    print(valid)
    print(nums)

sum6([1,2,3,6,4,5])
打印有效:[1,3,4]而不是[1,2,3,4,5]

打印nums:[2,6,5]而不是[6]


有一种方法可以做到这一点:

def sum6(nums):
    valid = [x for x in nums if x != 6]
    nums = [x for x in nums if x == 6]
    print(valid)
    print(nums)

>>> sum6([1,2,3,4,5,6])
    [1, 2, 3, 4, 5]
    [6]

有一种方法可以做到这一点:

def sum6(nums):
    valid = [x for x in nums if x != 6]
    nums = [x for x in nums if x == 6]
    print(valid)
    print(nums)

>>> sum6([1,2,3,4,5,6])
    [1, 2, 3, 4, 5]
    [6]

您正在更改正在迭代的对象的性质,而它正在被迭代。正如您所发现的,这会产生意外的结果。而是为for循环创建一个项的副本,并在循环期间保持正在迭代的特定对象完好无损

因此,例如,在代码中保持逻辑思维,您可以将其更改为以下内容:

def sum6(nums):
    valid = []
    invalid = []
    for item in nums:
        if item != 6:
            valid.append(item)
        else:
            invalid.append(item)
    print(valid)
    print(invalid)

sum6([1,2,3,6,4,5])

您正在更改正在迭代的对象的性质,而它正在被迭代。正如您所发现的,这会产生意外的结果。而是为for循环创建一个项的副本,并在循环期间保持正在迭代的特定对象完好无损

因此,例如,在代码中保持逻辑思维,您可以将其更改为以下内容:

def sum6(nums):
    valid = []
    invalid = []
    for item in nums:
        if item != 6:
            valid.append(item)
        else:
            invalid.append(item)
    print(valid)
    print(invalid)

sum6([1,2,3,6,4,5])

是否需要nums.removeitem?没有它,如果您不需要在函数末尾打印一个6的列表,那么代码将正常运行。我只是试图修改包含所有6的原始列表,而不是创建另一个列表。问题是,您在迭代时正在从原始列表中删除项。有关某些解决方案,请参阅副本。是否需要nums.removietem?没有它,如果您不需要在函数末尾打印一个6的列表,那么代码将正常运行。我只是试图修改包含所有6的原始列表,而不是创建另一个列表。问题是,您在迭代时正在从原始列表中删除项。有关一些解决方案,请参见副本。哦。。。我现在明白了。谢谢,真的很感激。哦。。。我现在明白了。谢谢,非常感谢。