假设我有这个清单:
lis = ['a','b','c','d']
如果我'x'.join(lis)
,结果是:
'axbxcxd'
获得此输出的简洁方法是什么?
'xaxbxcxdx'
我可以写一个辅助函数:
def joiner(s, it):
return s+s.join(it)+s
并将其称为joiner('x',lis)
,它返回xaxbxcxdx
,但它看起来并不像它那样干净。有没有更好的方法来获得这个结果?
答案 0 :(得分:22)
>>> '{1}{0}{1}'.format(s.join(lis), s)
'xaxbxcxdx'
答案 1 :(得分:7)
您可以加入以空字符串开头和结尾的列表:
>>> 'x'.join(['', *lis, ''])
'xaxbxcxdx'
答案 2 :(得分:4)
您可以使用 str.replace()
来交错字符:
>>> lis = ['a','b','c','d']
>>> ''.join(lis).replace('', 'x')
'xaxbxcxdx'
另一方面,您的原始解决方案(或带有字符串格式的微不足道的修改)实际上是 IMO 非常干净和可读的。
答案 3 :(得分:3)
您可以使用 f 字符串:
s = 'x'
f'{s}{s.join(lis)}{s}'
在 Python 3.8 中,您还可以使用 walrus 运算符:
f"{(s:='x')}{s.join(lis)}{s}"
或
(s:='x') + s.join(lis) + s
答案 4 :(得分:1)
生成器可以交错字符,结果可以join
进行处理而无需创建中间字符串。
L = list('abcd')
def mixer(chars, insert):
yield insert
for char in chars:
yield char
yield insert
result = ''.join(mixer(L, 'x')) # -> 'xaxbxcxdx'
虽然它不是单行的,但我认为它简洁明了,不像我最初想到的这些 itertools
创作:
from itertools import repeat, starmap, zip_longest
from operator import add
# L must have a len, so doesn't work with generators
''.join(a for b in itertools.zip_longest(repeat('x', len(L) + 1),
L, fillvalue='')
for a in b)
# As above, and worse still creates lots of intermediate strings
''.join(starmap(add, zip_longest(repeat('x', len(L) + 1), L, fillvalue='')))
答案 5 :(得分:0)
你也可以这样做
'x'.join([''] + lis + [''])
但我不确定它是否更清洁。
它会在空列表中只生成1个分隔符,而不是问题中的2个。
答案 6 :(得分:-1)
我认为你可以在 python 中使用 for 循环
var mapObject = {"one": 1, "two": 2, "three": 3, "four": 4};
var n = 2;
var result = Object.values(mapObject)[n];
console.log(result); // Should print 3. Remember arrays are 0-indexed.```
这段代码如何: for 循环将工作并打印第一个值,即 a,然后将 x 添加到它,同样的事情会发生在 b、c 和 d