迭代python列表并将特定字母大写

时间:2011-10-04 13:44:32

标签: python list

我在python中有一个列表,我想迭代并将每个不是'A'的字母大写,所以转到这个列表:

['albert', 'angela', 'leo', 'bridget']

分为:

['aLBERT', 'aNGELa', 'LEO', 'BRIDGET']

6 个答案:

答案 0 :(得分:4)

[''.join(c.upper() if c != 'a' else c for c in word) for word in the_list]

答案 1 :(得分:3)

所有现有答案似乎都希望单独对字符进行操作。只处理整个单词更简单,更容易:

>>> the_list = ['albert', 'angela', 'leo', 'bridget']
>>> [ word.upper().replace('A', 'a') for word in the_list]
['aLBERT', 'aNGELa', 'LEO', 'BRIDGET']

答案 2 :(得分:1)

>>> import re
>>> sl = ['albert', 'angela', 'leo', 'bridget']
>>> [re.sub('[^a]+', lambda m: m.group(0).upper(), s) for s in sl]
['aLBERT', 'aNGELa', 'LEO', 'BRIDGET']

答案 3 :(得分:1)

这是str.translate的用途:

import string

table = string.maketrans(string.ascii_lowercase.replace('a', ''),
                            string.ascii_uppercase.replace('A', ''))

names = ['albert', 'angela', 'leo', 'bridget']

print [name.translate(table) for name in names]

translate采用256个字符的表,因此您使用string.maketrans将表示小写和大写字母的string constants转换为表格。任何未出现在表格中的字母都会被忽略,因此删除aA会使所有其他字母大写。

然后只需将翻译表应用于列表中的每个名称。

除了遍历每个名​​称并在upper的每个字母上调用a之外,它会更快。虽然一般的Python工具使这很容易,但这是专门为这项工作制作的工具。

答案 4 :(得分:0)

不雅的方式很简单

  lst = ['albert', 'angela', 'leo', 'bridget']
  lst2 = []

  for wrd in lst:
      newwrd = ''
      for ltr in wrd:
          if ltr != 'a':
              newwrd += ltr.upper()
          else: newwrd += ltr
      lst2.append(newwrd)

然而,列表的理解将更加pythonic

lst = ['albert', 'angela', 'leo', 'bridget']
[''.join(ltr.upper() if ltr != 'a' else 'a' for ltr in wrd) for wrd in lst]

这实际上是嵌套列表推导替换嵌套循环。 这是一个更简洁的解决方案,更容易理解

列表推导是一个表达式(ltr.upper(),如果ltr =='a')后跟“for”,然后是option if子句。在这里,我们有两个(我看到@JBernardo做了同样的事情)以与嵌套for循环相同的方式行事。

我希望这有助于解释差异。

答案 5 :(得分:0)

如果你想更多地参与函数式编程范式:

def maybe_upper(c, u):
    return c.upper() if c in u else c

def some_upper(s, u):
    return ''.join(map(lambda c: maybe_upper(c, u), s))

>>> some_upper("wahwahweeeewagh", 'uea')
'wAhwAhwEEEEwAgh'