将嵌套列表中的单词拆分为字母

5
我在想如何将嵌套列表中的单词拆分为其各个字母,使得:
[['ANTT'], ['XSOB']]

变成

[['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']]

@thg435:同意。字符串本来就是可迭代的,所以你已经可以使用 for letter in sublist[0] 了。 - Phil H
4个回答

10

使用列表推导式:

[list(l[0]) for l in mylist]

您的输入列表只包含每个嵌套列表中的1个元素,因此我们需要在每个元素上使用l[0]。对于字符串,list()会创建一个由单个字符组成的列表:

>>> mylist = [['ANTT'], ['XSOB']]
>>> [list(l[0]) for l in mylist]
[['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']]

如果您将代码修改为生成纯文本字符串列表(即没有单个元素的嵌套列表),那么您只需要删除[0]

>>> mylist = ['ANTT', 'XSOB']
>>> [list(l) for l in mylist]
[['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']]

2
您可以使用函数式方法(尽管我更喜欢像Martijn Pieters的答案中那样使用列表推导式):
>>> from operator import itemgetter
>>> delisted = map(itemgetter(0),[['ANTT'],['XSOB']])  # -> ['ANTT', 'XSOB']
>>> splited = map(list,delisted)  # -> [['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']]

或者,作为一行命令:

>>> map(list,map(itemgetter(0),[['ANTT'],['XSOB']]))
[['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']]

一个很好的使用 functional.compose 的案例:map(compose(list, itemgetter(0)), xs) - georg

1
>>> map(lambda s: map(list, s)[0], [['ANTT'],['XSOB']])
[['A', 'N', 'T', 'T'], ['X', 'S', 'O', 'B']]

0
到目前为止,所有给出的答案都包括一个有些可疑的0字面量。乍一看,这似乎是一个有些人为的加法,因为原始任务没有包括任何整数字面量。
但是,输入当然具有一些特殊属性,除了只是一个列表之外。它是一个由仅包含一个字符串字面量的列表组成的列表。换句话说,它是一个逐个打包的对象(字符串)集合。如果我们重新构造原始问题和接受的答案,我们可以更明显地表达[x][0]之间的关系。
package = [['ANTT'], ['XSOB']]
result = [list(box[0]) for box in package]   # 0 indicates first (and only) element in the box

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接