我有这个代码,但它返回第一个字母。我需要将第二个也是倒数第二个字母大写
def first_last_uppercase(array):
serie = pd.Series(array)
return serie.map(lambda x: x[0].upper() + x[1:-1] + x[-1].upper())
first_last_uppercase(languages)
实际结果:
0 PythoN
1 PhP
2 JavA
3 JavascripT
4 C++
5 SqL
预期结果:
0 pYthOn
1 pHp
2 jAVa
3 jAvascriPt
4 c++
5 sQl
任何想法
最佳答案
记住Python是从0开始索引的,所以第二个元素是1
。可迭代的最后一个元素是 -1
,因此倒数第二个是 -2
。因此,将您的 return 语句修改为
return serie.map(lambda x: x[0] + x[1].upper() + x[2:-2] + x[-2].upper() + x[-1])
它有点笨重,但我认为它适合您的输入:
>>> x = ["python", "php", "java", "javascript", "c++", "sql"]
>>> serie = pd.Series(x)
>>> serie.map(lambda x: x[0] + x[1].upper() + x[2:-2] + x[-2].upper() + x[-1])
0 pYthOn
1 pHHp
2 jAVa
3 jAvascriPt
4 c+++
5 sQQl
等等,它返回了 "php"
、"的
和 pHHp
、c++
和 sQQl
分别是 c++""sql"
。如果我尝试使用 2 个字符的字符串,例如 "c#"
,我会得到 "c#C#"
。如果我尝试只给它一个字母,例如 "c"
,它就会因 IndexError
而终止。
在将字符串传递给 lambda 之前,您需要检查字符串的长度,如果您尝试将其全部放入单个 lambda 中,则完全无法读取。相反,定义一个函数并使用它。
def two_caps(thing: str) -> str:
if len(thing) > 3:
new_thing = thing[0] + thing[1].upper() + thing[2:-2] + thing[-2].upper() + thing[-1]
elif len(thing) == 3:
new_thing = thing[0] + thing[1].upper() + thing[2]
else:
new_thing = thing
return new_thing
这将为输入 >= 3 返回正确大写的字符串。如果 len()
为 < 3,则返回原始内容。现在您可以使用此返回语句:
return serie.Map(lambda x: two_caps(x))
你应该可以开始了。
关于python - 如何使用 lambda 函数将 Python 中字符串列表的第二个和倒数第二个字母转换为大写并返回 pandas DataFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71376005/