首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于在所需数组元素中插入空格的Python字符串修复

用于在所需数组元素中插入空格的Python字符串修复
EN

Stack Overflow用户
提问于 2020-06-29 04:47:33
回答 4查看 72关注 0票数 2

我有下面的代码。基本上,我想把像"appleBanana","bananaFruit","cherryBlossom“这样的数组转换成”苹果香蕉“,”香蕉果“,”樱花“。

这是用Python编写的。

可重现的例子:

代码语言:javascript
复制
typelist = ["appleBanana", "bananaFruit", "cherryBlossom"]
  

typelist2 = ['']
last_was_upper = True

counter = 0

for d in typelist:
    for c in d:
        if c.isupper():
            if not last_was_upper:
                typelist2[counter] += ' '
            last_was_upper = True
        else:
          last_was_upper = False
          
        typelist2[counter] += c 
        
    counter = counter + 1
      
  
 


print(typelist2)

编辑

对于我的实际代码,这是我得到的输出

代码语言:javascript
复制
[' Advanced Algebra', ' Problem Solvingand Data Analysis', ' Basic Algebra', ' Problem Solvingand Data Analysis', ' Advanced Algebra', ' Advanced Algebra', ' Advanced Algebra', ' Problem Solvingand Data Analysis', ' Advanced Algebra', ' Problem Solvingand Data Analysis', ' Problem Solvingand Data Analysis', ' Problem Solvingand Data Analysis', ' Advanced Algebra', ' Problem Solvingand Data Analysis', ' Advanced Algebra', ' Advanced Algebra', ' Advanced Algebra', ' Advanced Algebra', ' Advanced Algebra', ' Problem Solvingand Data Analysis']

注意他们中的一些人在短语前有一个空格,而另一些人在字母之间没有空格。我想要的结果是简单的“高级代数”(显然有各自的字段)。如何删除开头的空格,并在中间为所有空格添加空格?

EN

回答 4

Stack Overflow用户

发布于 2020-06-29 04:59:22

您可以在一行解决方案中使用简单的列表理解来实现输出:

代码语言:javascript
复制
import re
typelist=["appleBanana", "bananaFruit", "cherryBlossom"]
typelist2=[re.sub(r"(\w)([A-Z])", r"\1 \2", element).title() for element in typelist]

输出:

代码语言:javascript
复制
>>> typelist2
['Apple Banana', 'Banana Fruit', 'Cherry Blossom']

re模块包含在标准的python发行版中,需要在大写字母前插入一个空格。

调用title()方法将第一个字母大写。

票数 1
EN

Stack Overflow用户

发布于 2020-06-29 05:02:53

这里有一个没有正则表达式的解决方案(它没有问题,只是采用了不同的方法):

代码语言:javascript
复制
typelist = ["appleBanana", "bananaFruit", "cherryBlossom"]

# for word in typelist
#   for letter in word:
#       if letter is uppercase, split word by index of letter,
#       then uppercase the first letter and put a space between the two words.

fixed_typelist = []
for word in typelist:
    for index, letter in enumerate(word):
        if letter.isupper():
            split_letter = word[:index].title(), word[index:]
            fixed_word = ' '.join(split_letter)
            fixed_typelist.append(fixed_word)

print(fixed_typelist)
>>> ['Apple Banana', 'Banana Fruit', 'Cherry Blossom']

本质上,核心问题是识别大写字母的索引(或位置)。我选择通过enumerate来实现这一点,它返回字母索引和字母本身的迭代量。找到索引后,您只需将单词拆分,并将第一个单词的第一个字母大写。

票数 1
EN

Stack Overflow用户

发布于 2020-06-29 05:12:11

另一个不带正则表达式的版本:

代码语言:javascript
复制
typelist = ["appleBanana", "bananaFruit", "cherryBlossom"]

for s in typelist:
    c, c2 = [], []
    for ch in s:
        if ch.isupper():
            c, c2 = c2, c
        c.append(ch)
    print(''.join(c2).title(), ''.join(c).title())

打印:

代码语言:javascript
复制
Apple Banana
Banana Fruit
Cherry Blossom

编辑:

代码语言:javascript
复制
typelist = ["appleBanana", "bananaFruit", "cherryBlossom", 'problemSolvingAndDataAnalysis']

out = []
for s in typelist:
    words = [[]]
    for ch in s:
        if ch.isupper():
            words.append([])
        words[-1].append(ch)
    out.append(' '.join(''.join(w).title() for w in words))

print(out)

打印:

代码语言:javascript
复制
['Apple Banana', 'Banana Fruit', 'Cherry Blossom', 'Problem Solving And Data Analysis']
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62628038

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档