【问题标题】:Separating Integers and Strings From a List [duplicate]从列表中分离整数和字符串
【发布时间】: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


【解决方案1】:

你可以使用list comprehension:

raw_list = [1, 2, 'ABC', 'DEF',5, 'GHI', 7]
A = [x for x in raw_list if type(x) == str]
B = [x for x in raw_list if type(x) == int]
print(A, B, sep = '\n')

输出:

['ABC', 'DEF', 'GHI']
[1, 2, 5, 7]

【讨论】:

    【解决方案2】:

    最好的方法是使用filter函数:

    x = [1, 2, 'ABC', 'DEF',5, 'GHI', 7]
    digits = list(filter(lambda e: isinstance(e, int), x))
    strings = list(filter(lambda e: isinstance(e, str), x))
    print(digits)
    print(strings)
    

    【讨论】:

    • 这没有回答“我忽略的相关概念是什么?”
    猜你喜欢
    • 1970-01-01
    • 2013-09-06
    • 2019-08-05
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 2021-01-18
    • 2018-07-13
    相关资源
    最近更新 更多