【发布时间】:2022-01-25 06:04:42
【问题描述】:
我是 Python 新手,正在学习列表和数据类型。我创建了一个列表并尝试使用 type() 函数从列表中分离整数和字符串。
A = [1, 2, 'ABC', 'DEF',5]
B = []
for i in A:
if type(i) == str:
B.append(i)
A.remove(i)
print(A)
操作:
[1, 2, 'DEF', 5]
虽然它在大部分部分都按预期工作,但它不会将“DEF”或我放置在索引 A[3] 处的任何字符串附加到 B。我检查了类型,它是 str。
我正在使用 Pycharm,但也尝试在在线解释器上这样做。给出相同的结果。我还在列表中添加了更多元素,但对于之后添加的元素,它按预期工作。
我也尝试过反向操作并过滤掉整数而不是字符串。
A = [1, 2, 'ABC', 'DEF',5, 'GHI', 7]
B = []
for i in A:
if type(i) == int:
#print(i)
B.append(i)
A.remove(i)
print(A,B, sep='\n')
操作:
[2, 'ABC', 'DEF', 'GHI']
[1, 5, 7]
即使这种方法也遗漏了第二个元素,如输出所示。我忽略了哪些相关概念?
【问题讨论】:
-
不要更改您正在迭代的列表
-
我认为问题在于您从迭代的列表中删除了该项目。您应该使用 index 迭代列表(使用 range 函数)。
-
print(A) 在循环内你会得到答案。当您删除当前元素时,在下一次传递中,它会在循环中跳过下一个元素 bcz,假设您使用 remove() 方法后下一个元素是当前元素。
标签: python python-3.x