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



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

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'

但是我怎样才能让它做这样的事情,所以我不只是在字母周围移动?这就是我想要完成的:

swapping("Boys and girls left the school.", "boys", "girls")
swapping("Boys and girls left the school.", "GIRLS", "bOYS")
should both have an output: "GIRLS and BOYS left the school." 
# Basically swapping the words that are typed out after writing down a string

你可以做这样的事情:

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)

带有正则表达式和替换函数(可以使用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.

使用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)

您要在此处执行两个单独的操作:交换和更改字符大小写。

前者在其他答复中已述及。

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

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.'

最新更新