我做了一个简单的代码,将数组中的元素分成两个新数组:一个是奇数,另一个是偶数。所以我这样做了:
V=[1,2,3,4,5,6]
vp=[]
vi=[]
for x in V:
if x%2==0:
vp.append(x)
V.remove(x)
else:
vi.append(x)
V.remove(x)
print (V)
print (vp)
print (vi) # sorry for the bad identation first time sharing code here
这段代码给了我这个结果:
[2,4,6]
[]
[1,3,5]
怎么回事?我怎么解决这个问题?
答案 0 :(得分:0)
不要从正在迭代的列表中删除项目。使用副本:
V=[1,2,3,4,5,6]
vp=[]
vi=[]
for x in V[:]:
if x%2==0:
vp.append(x)
V.remove(x)
else:
vi.append(x)
V.remove(x)
print (V)
print (vp)
print (vi)
# []
# [2, 4, 6]
# [1, 3, 5]
答案 1 :(得分:0)
遍历数组时不应删除项目:
V=[1,2,3,4,5,6]
vp=[]
vi=[]
for x in V:
if x%2==0:
vp.append(x)
else:
vi.append(x)
答案 2 :(得分:0)
修改list
mid-iteration导致错误行为(您实际上跳过了输入元素)。不要remove
来V
{长V
费用昂贵,remove
O(n)
O(n**2)
总工作V
V
),只保留O(n)
未经修改。如有必要,请在完成后清除del V[:]
(单public class Rootobject
{
public Class1[] Property1 { get; set; }
}
public class Class1
{
public Mountain[] Mountains { get; set; }
}
public class Mountain
{
public string MtName { get; set; }
public int Masl { get; set; }
public int Difficulty { get; set; }
public int Island { get; set; }
}
次操作),例如循环之后:
Mountains
答案 3 :(得分:0)
从列表中删除项目时,列表会变短。因此,当您在向前方向上循环列表时,删除项将导致迭代器向前跳过。
为了缓解这种情况,您可以在列表上向后循环并安全地删除项目,因为您要从最后删除它们。
V = [1,2,3,4,5,6]
vp = []
vi = []
# reverse the list before iterating
for x in reversed(V):
if x % 2 == 0:
vp.append(x)
V.remove(x)
else:
vi.append(x)
V.remove(x)
答案 4 :(得分:0)
确定问题和解决方案的其他答案,但这是使用list comprehensions执行此操作的另一种方法。
numbers = [1,2,3,4,5,6]
even = [e for e in numbers if e % 2 == 0]
odd = [e for e in numbers if e % 2 == 1]
答案 5 :(得分:0)
从原文制作新的奇数和偶数列表的更简洁方法是使用理解:
v = [1,2,3,4,5,6]
even = [number for number in v if number % 2 == 0]
odd = [number for number in v if number % 2 != 0]