我正在尝试更新我的字符串:
例如,如果我的输入字符串是:
n = 'what is the boarding time in bangalore station'
我希望输出字符串为:
WHAT si THE gnidraob TIME ni BANGALORE noitats
这是我尝试过的代码:
n = 'what is the boarding time in bangalore station'
m = n.split(" ")
k=m[0::2]
for i in k:
print(i.upper())
答案 0 :(得分:5)
您的解决方案不完整。而不是切换每个备用词并一次执行一种操作,依次迭代每个词,并在适当的时候处理它。
这是解决问题的一种简单方法。定义一个小功能来为您完成此操作。
def f(n):
for i, w in enumerate(n.split()):
if i % 2 == 0:
yield w.upper() # uppercase even words
else:
yield w[::-1] # reverse odd words
>>> ' '.join(f('what is the boarding time in bangalore station'))
'WHAT si THE gnidraob TIME ni BANGALORE noitats'
f
做的是将字符串拆分为单词列表。 enumerate
将列表转换为(索引,单词)元组列表。使用索引确定该单词是奇数还是偶数单词。 yield
将函数转换为生成器,从循环中一次生成一个单词。最后,str.join
将每个单词连接回一个字符串。
请注意,还有其他方法可以实现此目的。我把它们作为练习留给你。
答案 1 :(得分:4)
您可以将zip
与列表理解表达式(以及str.join
一起使用)来获取所需的字符串。例如:
>>> my_str = "what is the boarding time in bangalore station"
>>> words = my_str.split() # list of words
>>> ' '.join(['%s %s'%(x.upper(), y[::-1]) for x, y in zip(words[::2], words[1::2])])
'WHAT si THE gnidraob TIME ni BANGALORE noitats'
注意:这里我使用的是 list comprehension 而不是 generator 表达式,因为尽管生成器表达式效率更高但情况并非如此与str.join
一起使用。为了解这种奇怪行为的原因,请看一下:
Raymond Hettinger's answer for "List comprehension without [ ] in Python"
Blckknght's answer for "List vs generator comprehension speed with join function"
这里基于理解的大部分答案都是使用 generator ,尽管他们将其称为 list comprehension :D:D
答案 2 :(得分:1)
另一个列表理解解决方案:
n = 'what is the boarding time in bangalore station'
print(' '.join(word[::-1] if ind % 2 == 1 else word.upper() for ind, word in enumerate(n.split())))
输出:
'WHAT si THE gnidraob TIME ni BANGALORE noitats'
另一种解决方案:
upper_words = [item.upper() for item in n.split()[0::2]]
reverse_words = [item[::-1] for item in n.split()[1::2]]
print(' '.join(word[0] + ' ' + word[1] for word in zip(upper_words, reverse_words)))
输出:
'WHAT si THE gnidraob TIME ni BANGALORE noitats'
答案 3 :(得分:1)
在一行中更具描述性:
print(' '.join([w[::-1] if i % 2 else w.upper() for i, w in enumerate(n.split())]))
输出:
'WHAT si THE gnidraob TIME ni BANGALORE noitats'
答案 4 :(得分:1)
没有达到高水平,只需要if-else:
n = 'what is the boarding time in bangalore station'
m = list(n.split(' '))
for i in range(len(m)):
if i%2==0:
print(m[i].upper(),end=' ')
else:
print(m[i][::-1].lower(),end=' ')
答案 5 :(得分:0)
使用理解回答问题的另一种方法:
n = 'what is the boarding time in bangalore station'
b = n.split()
final = ' '.join(map(lambda x: ' '.join(x), ((k.upper(), v[::-1]) for k, v in zip(b[::2], b[1::2]))))
print(final)
输出:
'WHAT si THE gnidraob TIME ni BANGALORE noitats'
答案 6 :(得分:0)
怎么样:
n = 'what is the boarding time in bangalore station'
' '.join([token.upper() if i%2==0 else token[::-1]
for i, token in enumerate(n.split())
]
)
enumerate()
进行迭代以保持计数。i%2
str[::-1]
)如果是奇数' '.join([...])