如何使用python打印字符串中的替代元素


  • 我有一个字符串'abcdef'

  • 需要打印元素,如第一个元素,最后一个元素,第二个元素,倒数第二个元素

  • 预期输出为afbecd

  • abcde的另一个输出预期是aebdc

  • 我们可以在不创建额外列表的情况下完成吗

伪代码:

str1 = 'abcdef'
i= 0
j = 1
new_str = ''
while (i < len(str1) && j > len(str1) and i!=j):
new_str = str1[i] + str1[j]

没有任何虚假的内存使用,您可以对reversedzip使用一些惰性迭代器/生成器

def interleave(s):
gen = (c for pair in zip(s, reversed(s)) for c in pair)
return "".join(next(gen) for _ in s)
>>> interleave("abcdef")
'afbecd'
>>> interleave("abcde")
'aebdc'

您可以引入更多utils来进一步缩短代码:

from itertools import chain  
def interleave(s):
gen = chain.from_iterable(zip(s, reversed(s)))
return "".join(next(gen) for _ in s)

使用您的方法,您可以:

str1 = 'abcdef'
i= 0
j = len(str1) - 1
new_str = ''
while (j>i):
new_str += str1[i] + str1[j]
i+=1
j-=1
if len(str1) % 2 != 0:
new_str += str1[j]
print(new_str)

输出:

afbecd

在我看来,这里有两种基于字符串长度的可能性,但它们实际上只是在如何处理中间字符方面有所不同。因此,输入abcdefg的输出应该是agbfced,而abcdef的输出应该是afbecd

考虑到以上,我认为这应该是可行的:

def zip_str(input_str):
width = len(input_str)
half_width = int(width / 2)
new_str = ""
for i in range(0, half_width):
new_str += input_str[i] + input_str[-1 - i]
return new_str if width % 2 == 0 else new_str + input_str[half_width]

一种不是特别有效但简单且有趣的方法是继续反转剩余的字符串(在线尝试!):

s = 'abcdef'
result = ''
while s:
*s, char = reversed(s)
result += char
print(result)

或者,因为你实际上说你想打印(在线试试!):

s = 'abcdef'
while s:
*s, char = reversed(s)
print(char, end='')

最新更新