Python 在之前、之间和之后连接字符串

Python 在之前、之间和之后连接字符串,python,string,Python,String,假设我有以下列表: lis = ['a','b','c','d'] 如果我做了'x'.join(lis),结果是: 'axbxcxd' 获得此输出的干净、简单的方法是什么 'xaxbxcxdx' 我可以编写一个助手函数: def joiner(s, it): return s+s.join(it)+s 并像joiner('x',lis)那样调用它,它返回xaxbxdx,但它看起来不像可能的那么干净。有没有更好的方法来获得这个结果?您也可以这样做 'x'.join([''] + l

假设我有以下列表:

lis = ['a','b','c','d']
如果我做了
'x'.join(lis)
,结果是:

'axbxcxd'
获得此输出的干净、简单的方法是什么

'xaxbxcxdx'
我可以编写一个助手函数:

def joiner(s, it):
    return s+s.join(it)+s
并像
joiner('x',lis)
那样调用它,它返回
xaxbxdx
,但它看起来不像可能的那么干净。有没有更好的方法来获得这个结果?

您也可以这样做

'x'.join([''] + lis + [''])
但我不确定它是否干净

它将在空列表上只生成1个分隔符,而不是问题中的2个分隔符。

您可以使用f-string:

>>> '{1}{0}{1}'.format(s.join(lis), s)
'xaxbxcxdx'
s = 'x'
f'{s}{s.join(lis)}{s}'
在Python 3.8中,还可以使用walrus操作符:

f"{(s:='x')}{s.join(lis)}{s}"


您可以使用
str.replace()
交错字符:

>>> lis = ['a','b','c','d']
>>> ''.join(lis).replace('', 'x')
'xaxbxcxdx'

另一方面,您的原始解决方案(或对字符串格式的一个小修改)实际上是非常干净和可读的。

生成器可以交错字符,并且结果可以
连接
而无需创建中间字符串

L=list('abcd')
def混合器(chars,insert):
屈服插入
对于char中的char:
产焦
屈服插入
结果=''.join(mixer(L,'x'))#->'xaxbxdx'
虽然它不是一行程序,但我认为它干净简单,不像我最初提出的这些
itertools
创作:

从itertools导入重复、星图、zip\u
从操作员导入添加
#我必须有透镜,所以不能用发电机
''.join(在itertools.zip_中a代表b)(重复('x',len(L)+1),
五十、 fillvalue=“”)
b)中的a)
#如上所述,更糟的是,还会创建许多中间字符串
''.join(星图(add,zip_最长(repeat('x',len(L)+1),L,fillvalue=''))

您可以加入以空字符串开头和结尾的列表:

>>> 'x'.join(['', *lis, ''])
'xaxbxcxdx'

我认为可以在python中使用for循环

lis = ['a','b','c','d']
for a in lis:
    print(a + 'x')
该代码如何:
for循环将工作并打印第一个值,即a,然后将x添加到其中。同样的事情也会发生在b、c和d上。

希望这样做的主要原因是不要将“x”乱丢三次<代码>'x'在我的应用程序中是一个稍长的字符串。这很有帮助,谢谢。我认为你是在做
s+s.join(it)+s
还是
join(['']+lis+['])
并不重要。在任何情况下,由于
join
不能直接做您想要做的事情,您必须在列表中预先添加一些内容。@Jan PhilipGehrcke
[']+lis->new list
new list+[']->第二个新列表,然后
join
。我认为,最好使用
itertools.chain
我不会说这比另一个答案好太多。@Jan PhilipGehrcke我喜欢这个,主要是因为它非常灵活-如果需要的话,在将来很容易适应,另一个答案就不那么好了。很好。。。而且很简单!很好,但是如果列表中的元素有多个字符,这就不起作用了:在列表foo栏上这样做会得到xfxoxrx而不是xfooxbarx。@Basj同意,无论如何我不会在生产代码中使用它。正如我所说,OP的解决方案是相当合理的
lis = ['a','b','c','d']
for a in lis:
    print(a + 'x')