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

2024-10-04 05:22:30 发布

您现在位置: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]

Tags: and字符串代码元素列表newlen情况
3条回答

通过您的方法,您可以做到:

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]

在没有任何虚假内存使用的情况下,您可以将一些惰性迭代器/生成器与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'

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

from itertools import chain  

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

相关问题 更多 >