使用列表推导式转换字符串为列表却返回生成器对象的原因分析及正确实现方法
嘿,这个问题我之前刚踩过坑,咱们来掰扯清楚~
为啥你得到的是生成器对象?
先看你写的这段代码:
a='sadfaad' b=[] b.append(x for x in a) print(b)
这里的x for x in a是生成器表达式——它不会直接生成你想要的字符列表,而是创建了一个迭代器(就是你看到的那个<generator object ...>)。当你把这个生成器直接append到列表b里,列表自然就存了这个迭代器对象,而不是拆分后的字符。
正确实现字符串转列表的两种方式
方式1:用标准列表推导式
列表推导式必须用**方括号[]**把表达式包裹起来,这样Python才会直接生成列表:
a = 'sadfaad' b = [x for x in a] print(b) # 输出: ['s', 'a', 'd', 'f', 'a', 'a', 'd']
方式2:更简洁的list()转换
其实字符串本身就是可迭代对象,直接用list()函数就能把它拆成字符列表,这比列表推导式更直观:
a = 'sadfaad' b = list(a) print(b) # 输出: ['s', 'a', 'd', 'f', 'a', 'a', 'd']
(可选)如果一定要用append(不推荐)
要是你非得保留append的写法,得先把生成器转成列表再添加——不过这样会得到嵌套列表,一般没必要这么做:
a = 'sadfaad' b = [] b.append([x for x in a]) # 或者写成 b.append(list(x for x in a)) print(b) # 输出: [['s', 'a', 'd', 'f', 'a', 'a', 'd']]
内容的提问来源于stack exchange,提问作者Ajay Panwar
相关产品推荐
相关产品推荐

