Python如何从字符串列表中提取非空格字符到独立列表?
问题分析与解决
错误原因
你的代码存在三个核心问题:
- 循环变量误用:
for i in messages里的i是列表中的字符串元素(比如第一个循环里i是'd h y u y r w u u r'),不是整数索引,所以用messages[i]会触发TypeError——列表只能用整数/切片做索引。 - 固定遍历第一个元素:内层循环写的是
for j in messages[0],只会处理列表的第一个字符串,导致两次循环都在重复提取第一个字符串的字符。 - 未创建独立子列表:
newlist是全局的,每次循环都往同一个列表里加字符,最终结果是所有字符的累加,而非每个字符串对应一个独立列表。
正确实现
基础循环版
为每个字符串创建独立子列表,遍历当前字符串而非固定第一个元素:
messages = ['d h y u y r w u u r', 'y h w e u h e h d d'] result = [] for s in messages: sub_list = [] for char in s: if char != ' ': sub_list.append(char) result.append(sub_list) print(result)
输出:
[['d', 'h', 'y', 'u', 'y', 'r', 'w', 'u', 'u', 'r'], ['y', 'h', 'w', 'e', 'u', 'h', 'e', 'h', 'd', 'd']]
列表推导式版(更简洁)
用嵌套列表推导式一步完成,逻辑和循环版一致:
messages = ['d h y u y r w u u r', 'y h w e u h e h d d'] result = [[char for char in s if char != ' '] for s in messages] print(result)
输出和上面相同。
额外优化:用split()方法
如果字符串中的非空格字符都是单个空格分隔,也可以用split()直接拆分(split()默认按任意空白字符分割,自动忽略空格):
messages = ['d h y u y r w u u r', 'y h w e u h e h d d'] result = [s.split() for s in messages] print(result)
输出同样符合需求,代码更简洁。
内容的提问来源于stack exchange,提问作者Nathan
相关产品推荐
相关产品推荐

