我在python中有一个列表,我想迭代并将每个不是'A'的字母大写,所以转到这个列表:
['albert', 'angela', 'leo', 'bridget']
分为:
['aLBERT', 'aNGELa', 'LEO', 'BRIDGET']
答案 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转换为表格。任何未出现在表格中的字母都会被忽略,因此删除a
和A
会使所有其他字母大写。
然后只需将翻译表应用于列表中的每个名称。
除了遍历每个名称并在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'