python - 如何使用 lambda 函数将 Python 中字符串列表的第二个和倒数第二个字母转换为大写并返回 pandas DataFrame

标签 python pandas

我有这个代码,但它返回第一个字母。我需要将第二个也是倒数第二个字母大写

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""的 pHHpc++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/

相关文章:

python - 如何在设置参数时使用 .split() 以跳过特定标记

python - 更改 Python 的默认编码?

python - 将 MySQL 与 Python 连接

python - 用 Pandas 计算每行的 NaN

python - 使用 Python 解析混合平面文件数据以写入 xls

python - 用列表理解替换循环,而不是循环获取函数以在列表理解中返回新数组

python - Pandas 两个数据框交叉连接

python - 如何提取日期条件下的行

python - 如何使用 DataFrame 的输出进行操作?

python - 如何忽略 CSV 文件中的第一个值?