>假设我有一个列表,其中每个元素包含 1 个以上的字符,如下所示:
ls = [" *X* ", " *** ", " W** "]
我想将多个特征元素分成单独的元素,如下所示:
ls = [" * ", "X", " * ", " * ", " * ", " * ", "W", " * ", " * "]
我该怎么做?
试试这个,
ls = ["*X*", "***", "W**"]
output = []
for i in ls:
output.extend(list(i.strip()))
print(output)
嵌套列表推导是一种快速简便的扁平化方法:
ls = ["*X*", "***", "W**"]
flattened = [char for entry in ls for char in entry]
# Produces ['*', 'X', '*', '*', '*', '*', 'W', '*', '*']
ls = [" *X* ", " *** ", " W** "]
def split(word):
return [char for char in word.strip() ]
splitted_list = []
for word in ls:
splitted_list.extend(split(word))
print(splitted_list)
['*', 'X', '*', '*', '*', '*', 'W', '*', '*']
简单的join
+split
就可以了
print (''.join(ls).split())
#['*', 'X', '*', '*', '*', '*', 'W', '*', '*']
如果您希望元素中有空格
print ([i if i!='*' else f' {i} ' for i in ''.join(ls).replace(' ','')])
#[' * ', 'X', ' * ', ' * ', ' * ', ' * ', 'W', ' * ', ' * ']
您可以在*
项周围添加空格,并使用isspace()
过滤掉空格:
>>> ls = [" *X* ", " *** ", " W** "]
>>> [f" {c} " if c == "*" else c for s in ls for c in s if not c.isspace()]
[' * ', 'X', ' * ', ' * ', ' * ', ' * ', 'W', ' * ', ' * ']
如果我们不关心*
周围的空间,那么我们可以简化上述内容:
>>> [c for s in ls for c in s if not c.isspace()]
['*', 'X', '*', '*', '*', '*', 'W', '*', '*']
另请注意,[c for s in ls for c in s]
只是扁平化列表。
您好,这是我的解决方案,因为我在评论中意识到您想跳过空格,并且当字符*
时,您必须将其放在空格之间,这是我的解决方案:
ls = [" *X* ", " *** ", " W** "]
newls =[]
for ele in ls:
for char in ele:
if char==" ":
continue;
if char=="*":
char=" "+char+" "
newls.append(char)
print(newls)
这是输出:[' * ', 'X', ' * ', ' * ', ' * ', ' * ', 'W', ' * ', ' * ']
我希望这能帮助你。
你可以使用这样的列表推导式
ls = [" *X* ", " *** ", " W** "]
l = [x.strip() for sublist in ls for x in sublist if x.strip()]
print(l)
输出
['*', 'X', '*', '*', '*', '*', 'W', '*', '*']