所以我开始:
['BLUE', 'ORANGE', 'YELLOW', 'GREEN', 'BLACK', 'PURPLE', 'BROWN']
我希望:
[['B', 'L', 'U', 'E'], ['O', 'R', 'A', 'N', 'G', 'E'], ['Y', 'E', 'L', 'L', 'O', 'W'], ['G', 'R', 'E', 'E', 'N'], ['B','L', 'A', 'C', 'K'], ['P', 'U', 'R', 'P', 'L', 'E'], ['B', 'R', 'O', 'W','N']]
我试过这个,因为看起来它会产生我想要的东西,但它一直告诉我,我有一个错误。 AttributeError:'NoneType'对象没有属性'append':
first_list = ['BLUE', 'ORANGE', 'YELLOW', 'GREEN', 'BLACK', 'PURPLE', 'BROWN']
list_1 = []
for i in range (len(first_list)):
list_1 = list_1.append(list(first_list[i]))
return list_1
我一直在使用“.append”时遇到麻烦,并在其他迭代中继续使用“+”,但这只是给了我一个很长的所有字符列表而不是字符的子列表列表。感谢您提供任何帮助或建议。
答案 0 :(得分:9)
内置list()
函数从可迭代对象创建列表。由于字符串是可迭代对象,因此我们可以将其传递给list()
以创建单个字符的列表。要对每个单词执行此操作,我们可以使用list comprehension:
>>> words = ['BLUE', 'ORANGE', 'YELLOW', 'GREEN', 'BLACK', 'PURPLE', 'BROWN']
>>> [list(word) for word in words]
[['B', 'L', 'U', 'E'], ['O', 'R', 'A', 'N', 'G', 'E'], ['Y', 'E', 'L', 'L', 'O', 'W'], ['G', 'R', 'E', 'E', 'N'], ['B', 'L', 'A', 'C', 'K'], ['P', 'U', 'R', 'P', 'L', 'E'], ['B', 'R', 'O', 'W', 'N']]
编辑:您获得的属性错误是因为列表的append()
方法返回None。由于您将方法的输出分配给list1
变量,因此您在循环第一次使用None覆盖列表。由于None没有append
方法,因此下次循环时会出现错误。删除此分配可使您的代码正常工作:
>>> first_list = ['BLUE', 'ORANGE', 'YELLOW', 'GREEN', 'BLACK', 'PURPLE', 'BROWN']
>>> list_1 = []
>>> for i in range (len(first_list)):
... list_1.append(list(first_list[i]))
...
>>> list_1
[['B', 'L', 'U', 'E'], ['O', 'R', 'A', 'N', 'G', 'E'], ['Y', 'E', 'L', 'L', 'O', 'W'], ['G', 'R', 'E', 'E', 'N'], ['B', 'L', 'A', 'C', 'K'], ['P', 'U', 'R', 'P', 'L', 'E'], ['B', 'R', 'O', 'W', 'N']]
答案 1 :(得分:3)
>>> map(list,first_list)
[['B', 'L', 'U', 'E'], ['O', 'R', 'A', 'N', 'G', 'E'], ['Y', 'E', 'L', 'L', 'O', 'W'], ['G', 'R', 'E', 'E', 'N'], ['B', 'L', 'A', 'C', 'K'], ['P', 'U', 'R', 'P', 'L', 'E'], ['B', 'R', 'O', 'W', 'N']]
list
构造函数应用于原始列表的每个元素。原始列表的元素是字符串,它们是可迭代的。因此list
只使用字符串将其视为迭代器,因此最终它包含字母(如果字符串被迭代,则字符串会将字母作为元素)。
答案 2 :(得分:1)
您可以简单地将字符串强制转换为列表,以获取字符串字符的列表。
words = ['BLUE', 'ORANGE', 'YELLOW', 'GREEN', 'BLACK', 'PURPLE', 'BROWN']
split_words = [list(word) for word in li]
答案 3 :(得分:1)
现有代码不起作用的唯一原因是list.append
修改了列表,并返回None
。所以:
for i in range (len(first_list)):
list_1 = list_1.append(list(first_list[i]))
第一次,您将第一个单词添加到list_1,然后将list_1设置为None
。所以下一次,你得到一个AttributeError
。
这样做:
for i in range (len(first_list)):
list_1.append(list(first_list[i]))
或者使用不会就地修改列表的函数,而是返回一个新函数:
for i in range (len(first_list)):
list_1 = list_1 + [list(first_list[i])]
如果索引range(len(first_list))
所需的全部是i
,则循环first_list[i]
会有点愚蠢。你可以直接循环first_list
。 (即使你 需要i
用于其他目的,你也可以循环enumerate(first_list)
。)
然而,正如许多人所指出的那样,使用列表推导几乎总是比尝试使用显式循环构建列表更好。
事实上,其中一个原因是您不必记住append
与extend
,其中函数mutate并返回新值,依此类推。
答案 4 :(得分:0)
这样做:
myList = ['BLUE', 'ORANGE', 'YELLOW', 'GREEN', 'BLACK', 'PURPLE', 'BROWN']
res = [[i for i in s] for s in myList]
res
[['B', 'L', 'U', 'E'], ['O', 'R', 'A', 'N', 'G', 'E'], ['Y', 'E', 'L', 'L', 'O', 'W'], ['G', 'R', 'E', 'E', 'N'], ['B', 'L', 'A', 'C', 'K'], ['P', 'U', 'R', 'P', 'L', 'E'], ['B', 'R', 'O', 'W', 'N']]
答案 5 :(得分:0)
您可以使用list()
:
map
应用于每个项目
>>> words = ['BLUE', 'ORANGE', 'YELLOW', 'GREEN', 'BLACK', 'PURPLE', 'BROWN']
>>> map(list, words)
[['B', 'L', 'U', 'E'], ['O', 'R', 'A', 'N', 'G', 'E'], ['Y', 'E', 'L', 'L', 'O', 'W'], ['G', 'R', 'E', 'E', 'N'], ['B', 'L', 'A', 'C', 'K'], ['P', 'U', 'R', 'P', 'L', 'E'], ['B', 'R', 'O', 'W', 'N']]
虽然我不确定你为什么需要这样做。字符串和列表的行为几乎相同。
答案 6 :(得分:0)
您当前的解决方案不起作用,因为list.append()
返回None
,并且您将list_1.append()
的结果分配回list_1
,所以在第二次迭代中,您获得属性错误。
以下是修复当前代码的方法:
first_list = ['BLUE', 'ORANGE', 'YELLOW', 'GREEN', 'BLACK', 'PURPLE', 'BROWN']
list_1 = []
for i in range(len(first_list)):
list_1.append(list(first_list[i]))
更好的解决方案是直接遍历列表中的项目:
for s in first_list:
list_1.append(list(s))
但是,最好的方法是使用列表推导或地图,就像在其他答案中一样。