从列表中分离整数和字符串

14 浏览
0 Comments

从列表中分离整数和字符串

我刚接触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中。我检查了类型,它是字符串。

我使用的是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]

即使按照这种方法,输出结果也不包括第二个元素。我忽视了哪个相关的概念?

0
0 Comments

原因: 问题的出现是因为列表中包含了整数和字符串,需要将它们分开。

解决方法: 可以使用列表推导式来解决这个问题。首先,定义一个原始列表(raw_list),其中包含了整数和字符串的元素。然后,使用列表推导式创建两个新的列表A和B,分别用于存储原始列表中的字符串和整数。在列表推导式中,通过判断元素的类型来将元素分别添加到A和B中。最后,使用print语句将A和B打印出来,使用sep参数设置换行符作为分隔符。

以下是代码的示例和输出结果:

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]

通过上述代码,我们成功将原始列表中的整数和字符串分隔开来。列表A中存储了原始列表中的字符串元素,列表B中存储了原始列表中的整数元素。这种方法简洁高效,能够快速解决问题。

0
0 Comments

从上面的代码和问题可以看出,问题的出现是因为作者想要从一个列表中将整数和字符串分开,但是没有找到合适的方法来实现这个目标。解决方法是使用Python中的filter函数,通过lambda表达式来判断元素的类型,将整数和字符串分别过滤出来,并分别存放在digits和strings两个列表中。最后通过print语句打印出结果。

代码中使用filter函数来过滤列表x中的元素,lambda表达式判断元素是否为整数或字符串。isinstance函数用于判断元素的类型是否与指定类型相同,如果相同则返回True,否则返回False。filter函数根据lambda表达式的返回值来决定是否保留元素。最后将filter函数的返回结果转换为列表,并分别存放在digits和strings两个变量中。

这个问题的解决方法简洁高效,使用了Python内置的filter函数和lambda表达式,能够很方便地将整数和字符串分离出来。这种方法的优点是代码简单易懂,适用于处理较小规模的数据。但是如果列表中的元素较多,可能会影响性能。如果对性能要求较高,可以考虑使用其他方法,如列表推导式等。

0