Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/286.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 将数组的元素分成两个数组_Python - Fatal编程技术网

Python 将数组的元素分成两个数组

Python 将数组的元素分成两个数组,python,Python,我编写了一个简单的代码,将数组的元素分成两个新数组:一个是奇数数组,另一个是偶数数组。所以我这样做了: 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 identati

我编写了一个简单的代码,将数组的元素分成两个新数组:一个是奇数数组,另一个是偶数数组。所以我这样做了:

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]

这是怎么发生的?如何解决此问题?

不要从正在迭代的列表中删除项目。使用副本:

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]

在遍历数组时不应删除项:

V=[1,2,3,4,5,6]
vp=[]
vi=[]
for x in V:
 if x%2==0:
   vp.append(x)
 else:
  vi.append(x)

在迭代过程中修改
列表
会导致错误行为(实际上会跳过输入元素)。不要边走边从
V
中删除
(长期来看
V
会很昂贵,每次
remove
都是
O(n)
使总工作量
O(n**2)
),只需保持
V
不变即可。如有必要,请在完成(单个
O(n)
操作)后清除
V
,例如,在循环之后:

del V[:]

从列表中删除项目时,列表会变短。因此,当您正向遍历列表时,删除项将导致迭代器向前跳过

为了缓解这种情况,您可以在列表上向后循环并安全地删除项,因为您正在从末尾删除它们

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)

确定问题和修复的其他答案,但这里有一种不同的方法使用


从原始列表中创建新的奇偶列表的更简洁的方法是使用理解:

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]

准确地说,您的预期/期望输出是什么?您的缩进看起来不错,但您的注释是无效的Python——它应该以
#
而不是
/
开头。当您使用Python迭代列表时,从该列表中删除一个项目将导致您跳过一个项目。在本例中,您正在迭代V。因此,您最终修改了您的列表,如下所示:V[0]==1v[1]==2v[2]==3v.remove(0)V[0]==2v[1]==3第三个列表也不是必需的,在删除evens之后,剩下的将是补码集:赔率。感谢大家的帮助。
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]