如何在python的输入中交换字母?

时间:2011-04-25 17:59:04

标签: python

所以你接受诸如“你好”之类的输入

然后将第一个数字与第三个数字交换,并将第二个数字与第四个数字交换。

结果“Llheo”

3 个答案:

答案 0 :(得分:4)

这不重要。它可以通过字符串索引和切片来完成。但是你也必须考虑资本化并保留它。

>>> s = "Hello"
>>> x = list(s)
>>> x
['H', 'e', 'l', 'l', 'o']

先交换w / third并交换案例

>>> x[0], x[2] = x[2].upper(), x[0].lower()
>>> x
['L', 'e', 'l', 'h', 'o']

第二次w /第四次

>>> x[1], x[3] = x[3], x[1]
>>> x
['L', 'l', 'h', 'e', 'o']

将其变回字符串

>>> ''.join(x)
'Llheo'

这并不适用于所有情况,但在这种特殊情况下,这就是你要求的。

修改:使用功能更进一步:

def swap_letters(indexes, string):
    """
    @indexes should be a list of 2-tuples of indexes to swap, e.g.:
        [(0,2), (1,3)]
    @string is the input string.
    """
    letters = list(string)
    for src, dst in indexes:
        letter_src = letters[src]
        letter_dst = letters[dst]

        # Swap case on destination letter if src is upper
        if letter_src.isupper():
            letter_dst = letter_dst.upper()
            letter_src = letter_src.lower()

        letters[src], letters[dst] = letter_dst, letter_src

    return ''.join(letters)

if __name__ == '__main__':
    # This is the example from the OP
    indexes = [(0,2), (1,3)]
    word = 'Hello'
    print swap_letters(indexes, word)

    # And a proof of concept
    indexes = [(0,-1), (6,4)]
    word = 'ActiveSync'
    print swap_letters(indexes, word)

答案 1 :(得分:3)

这是一种不同的方法。您必须手动提交要交换的职位。所以在这里你可以改变swap_seq的值,它只是字符串索引的序列。

例如,s[0]+s[1]+s[2]+s[3]+s[4]为“Hello”,s[2]+s[3]+s[0]+s[1]+s[4]为“llHeo”。

s="Hello"
swap_seq="23014"
swapped=''.join([s[int(i)] for i in swap_seq])
if s[0].isupper(): swapped.capitalize()
print swapped

输出:Llheo


修改:swapped仅在s大写

时才会变为大写

答案 2 :(得分:0)

我们可以通过索引和切片在一个单词中交换两个字母。例如,要交换单词" Code"的第一个和最后一个字母,请查看以下代码。

string = "Code"
s = list(string)
s[0], s[len(s)-1] = s[len(s)-1].upper(), s[0].lower()
string = ''.join(s)
print(string)

O / p: - " Eodc"

此代码可以普遍应用于任何单词,无论该单词的长度如何。也可以通过更改索引号。您可以像这样更改要交换的字母:

s[0], s[len(s)-2] = s[len(s)-2].upper(), s[0].lower()

O / P: - " Doce"