Method1:
abc = 'Hello World'
qwe = 'abc 123'
#intersperse words
def intersperse(abc,qwe):
list = []
for i in abc:
list.append(i)
for j in qwe:
list.append(j)
return ''.join(list)
intersperse(abc,qwe)
Output: "Habc 123eabc 123labc 123labc 123oabc 123 abc 123Wabc 123oabc 123rabc 123labc 123dabc 123"方法2:
#intersperse words
def intersperse(abc,qwe):
abcs = abc.split()
qwes = qwe.split()
result = sum(zip(abcs, qwes+[0]), ())[:-1]
return ''.join(result)
intersperse(abc,qwe)
Output: "HelloabcWorld" (<--somehow the 123 is missing)这两种方法都试过了,但没能成功。我希望输出也考虑到字符之间的空白。
期望输出:"Haeblcl o1 2W3 o1“
发布于 2022-05-23 12:19:57
在一个简单的清单理解中加入一个简单的for-loop如何缩短这个问题呢?
def intersperse(abc,qwe):
min_len = min(len(abc), len(qwe))
return "".join([abc[i] + qwe[i] for i in range(min_len)]) + abc[min_len:] + qwe[min_len:]说明:确定两个字符串的最小长度--直到该长度,交替添加两个字符串的字符。最后,添加较长字符串的剩余字符,利用切片。
输出结果与预期的一样:intersperse("Hello World", "abc 123")生成'Haeblcl o1 2W3orld'。
发布于 2022-05-23 12:37:15
这很容易用发电机的功能来完成。
abc = 'Hello World'
qwe = 'abc 123'
def intersperce(a, b):
if len(a) > len(b):
filler = a[len(b):]
else:
filler = b[len(a):]
def generator():
for char_a, char_b in zip(a, b):
yield char_a
yield char_b
for x in filler:
yield x
return "".join(generator())
assert intersperce(abc, qwe) == "Haeblcl o1 2W3orld"yield返回值并挂起执行。只要在(a,b)上迭代一个zip,就可以轻松地一次生成一个字符。那就得用剩下的字符来填充。
你可以参考正式文件!
编辑:
我不知道zip_longest的事,谢谢你。这里有一个较短的版本,不需要填充。
from itertools import zip_longest
abc = 'Hello World'
qwe = 'abc 123'
def intersperce(a, b):
def generator():
for char_a, char_b in zip_longest(a, b, fillvalue=""):
yield char_a
yield char_b
return "".join(generator())
assert intersperce(abc, qwe) == "Haeblcl o1 2W3orld"这就引出了密码高尔夫版本。
from itertools import zip_longest
abc = 'Hello World'
qwe = 'abc 123'
def intersperce(a, b):
return "".join(i + j for i, j in zip_longest(a, b, fillvalue=""))
assert intersperce(abc, qwe) == "Haeblcl o1 2W3orld"发布于 2022-05-23 12:20:47
您可以使用迭代工具zip_longest和联接:
from itertools import zip_longest
abc = 'Hello World'
qwe = 'abc 123'
''.join(i+j for i, j in zip_longest(abc, qwe, fillvalue=''))输出:
'Haeblcl o1 2W3orld'https://stackoverflow.com/questions/72348363
复制相似问题