Python 3.6:在字符串中移动单词

时间:2018-05-14 19:13:06

标签: python python-3.x

我知道这个函数会在字符串中的字符周围移动,如下所示:

{
    "data": [
        {
            "access_token": "xxx",
            "name": "Test Page",
            "id": "1234",
            "perms": [
                "ADMINISTER",
                "EDIT_PROFILE",
                "CREATE_CONTENT",
                "MODERATE_CONTENT",
                "CREATE_ADS",
                "BASIC_ADMIN"
            ]
        }
    ],
    "paging": {
        "cursors": {
            "before": "xxx",
            "after": "xxx"
        }
    }
}

这允许我这样做:

def swapping(a, b, c):
    x = list(a)
    x[b], x[c] = x[c], x[b]
    return ''.join(x)

但我怎么能让它做这样的事情,所以我不只是在移动信件?这就是我想要实现的目标:

swapping('abcde', 1, 3)
'adcbe'
swapping('abcde', 0, 1)
'bacde'

4 个答案:

答案 0 :(得分:3)

您可以这样做:

def swap(word_string, word1, word2):
    words = word_string.split()
    try:
        idx1 = words.index(word1)
        idx2 = words.index(word2)
        words[idx1], words[idx2] = words[idx2],words[idx1]
    except ValueError:
        pass
    return ' '.join(words)

答案 1 :(得分:2)

使用split函数获取由whitespaces

分隔的单词列表
def swapping(a, b, c):
x = a.split(" ")
x[b], x[c] = x[c], x[b]
return ' '.join(x)

如果要将字符串作为参数传递,请使用.index()来获取要交换的字符串的索引。

def swapping(a, b, c):
x = a.split(" ")
index_1 = x.index(b)
index_2 = x.index(c)
x[index_2], x[index_1] = x[index_1], x[index_2]
return ' '.join(x)

答案 2 :(得分:2)

使用正则表达式和替换函数(可以使用lambda和双三元进行,但这不是真的可读)

匹配所有单词(\w+)并与两个单词进行比较(不区分大小写)。如果找到,请返回"对面"字。

import re

def swapping(a,b,c):
    def matchfunc(m):
        g = m.group(1).lower()
        if g == c.lower():
            return b.upper()
        elif g == b.lower():
            return c.upper()
        else:
            return m.group(1)

    return re.sub("(\w+)",matchfunc,a)

print(swapping("Boys and girls left the school.", "boys", "girls"))
print(swapping("Boys and girls left the school.", "GIRLS", "bOYS"))

同时打印:GIRLS and BOYS left the school.

答案 3 :(得分:0)

你想在这里做两件事:交换和改变角色案例。

前者已在其他答案中得到解决。

后者可以通过不区分大小写的方式搜索单词,但用输入单词替换,保留大小写。

def swapping(word_string, word1, word2):
    # Get list of lowercase words
    lower_words = word_string.lower().split()

    try:
        # Get case insensitive index of words
        idx1 = lower_words.index(word1.lower())
        idx2 = lower_words.index(word2.lower())
    except ValueError:
        # Return the same string if a word was not found
        return word_string

    # Replace words with the input words, keeping case
    words = word_string.split()
    words[idx1], words[idx2] = word2, word1

    return ' '.join(words)

swapping("Boys and girls left the school.", "GIRLS", "BOYS")
# Output: 'GIRLS and BOYS left the school.'