Python中如何将列表 [['chang'], ['du'], ['zhang', 'chang']] 拼接成字符串 "changduchangchangduzhang"
[[‘chang’], [‘du’], [‘zhang’, ‘chang’]] 如何拼成 “ changduchangchangduzhang ”呢
用途就是生成字段的拼音的各种情况,方便拼音检索
或者有其他思路?
Python中如何将列表 [[‘chang’], [‘du’], [‘zhang’, ‘chang’]] 拼接成字符串 “changduchangchangduzhang”
可以 flatten 以后直接拼起来?
这个问题其实是要把嵌套列表里的字符串按特定顺序拼接起来。从结果看,拼接规则是:先按顺序取每个子列表的第一个元素,然后按顺序取每个子列表的所有元素。
def concat_nested_list(lst):
# 第一步:取每个子列表的第一个元素
first_elements = [sublist[0] for sublist in lst if sublist]
# 第二步:取所有子列表的所有元素(展平)
all_elements = []
for sublist in lst:
all_elements.extend(sublist)
# 第三步:拼接
result = ''.join(first_elements) + ''.join(all_elements)
return result
# 测试
input_list = [['chang'], ['du'], ['zhang', 'chang']]
output = concat_nested_list(input_list)
print(output) # 输出: changduchangchangduzhang
更简洁的写法:
def concat_nested_list(lst):
first_part = ''.join(sublist[0] for sublist in lst if sublist)
second_part = ''.join(''.join(sublist) for sublist in lst)
return first_part + second_part
核心思路就是先提取首元素拼接,再展平所有元素拼接,最后合并。
.reduce(笛卡尔积).map(join).join (然后自己改成 python 语法)
arr.flat().join(’’)即可
flat 特性已在 ES2019 正式支持
import itertools
sample = [[‘chang’], [‘du’], [‘zhang’, ‘chang’]]
result = list(itertools.product(*sample))
for i in result:
print(’’.join(i))
就 2L 说的笛卡尔积是对的,LS 说 flat 的都没了解 LZ 想要什么……
BTW,LS 我的代码最后一行的缩进被吃了👀
刚才又写了个偷鸡算法,结果还是 LS 的更好用。
flatMap 成一个数组,然后拼成一个串。
楼上都很厉害,我只能发个结帖算法了:
if foo=="[[‘chang’], [‘du’], [‘zhang’, ‘chang’]] " then
foo=“changduchangchangduzhang”
再来个另类的,把 List 转 str 然后用正则取出所有字母即可
用 built in 的工具库算笛卡尔积,或者手写 DFS。DFS 递归写着还蛮方便的。之前不知道笛卡尔积的时候就是手写的 DFS
或者把大数组当成一个有向图,每个子数组都是一层,每个字符串是一个节点。之后强行在最前面插一个空字符串节点来充当根结点。之后遍历一遍就好了
cartesian product
哈哈哈哈哈你他娘的真是个人才
优秀的程序员很多,有趣的灵魂唯独你一只


