python 3如何将项目从另一个列表附加到列表中
我正试图将每个不是6的数字放入一个名为valid的单独列表中。根据我目前对循环的了解,我尝试在nums中的每个元素上循环并附加到“valid”中,但它并没有返回所有的数字!=6不是6,即使我先追加值,然后删除值。我当前的python版本是3.6python 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
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的原始列表,而不是创建另一个列表。问题是,您在迭代时正在从原始列表中删除项。有关一些解决方案,请参见副本。哦。。。我现在明白了。谢谢,真的很感激。哦。。。我现在明白了。谢谢,非常感谢。