我有蟒蛇名单,我想重复和把握每一个字母,是不是“A”,所以把该名单:迭代Python列表和利用特定的字母
['albert', 'angela', 'leo', 'bridget']
分为:
['aLBERT', 'aNGELa', 'LEO', 'BRIDGET']
我有蟒蛇名单,我想重复和把握每一个字母,是不是“A”,所以把该名单:迭代Python列表和利用特定的字母
['albert', 'angela', 'leo', 'bridget']
分为:
['aLBERT', 'aNGELa', 'LEO', 'BRIDGET']
现有的答案似乎都希望在字符单独操作。它是简单和容易只是处理的话作为一个整体:
>>> the_list = ['albert', 'angela', 'leo', 'bridget']
>>> [ word.upper().replace('A', 'a') for word in the_list]
['aLBERT', 'aNGELa', 'LEO', 'BRIDGET']
即将发布此信息。我认为它比其他答案要好,因为它呼叫的方式少,条件不好。 – pyInTheSky
除非你有'艾伯特',并且你希望它变成'ALBERT'而不是'aLBERT'。但是从例子中不清楚是否允许大写字母开头。 (而且我的答案并不是单独对字符进行操作,甚至使用比这个更少的函数调用,@pyInTheSky,n + 3而不是n * 2,尽管它不适用于非ASCII字符。) – agf
非常不错,我以前用过它,但不知道它是那么快 – pyInTheSky
[''.join(c.upper() if c != 'a' else c for c in word) for word in the_list]
@EOL:我认为使用'map'功能的解决方案可能会更简单,但不会太多.. –
@machineyearning每次有人说地图比理解更好时,闪电击中了一只小猫...只是说 – JBernardo
@EOL:简单就是'[word.upper()。替换('A','a')for_list]中的单词。这可以将“Adam”转换为“aDaM”。 –
的不雅方法很简单
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)
但是名单complrehensions会更Python
lst = ['albert', 'angela', 'leo', 'bridget']
[''.join(ltr.upper() if ltr != 'a' else 'a' for ltr in wrd) for wrd in lst]
这实质上嵌套列表内涵代替嵌套循环。 这是一个更简洁的解决方案,更容易理解
列表理解是一个表达式(ltr.upper()if ltr =='a')后跟“for”,然后是选项if子句。在这里我们有两个(我看@JBernardo做了同样的事情),它们的行为方式与嵌套for循环相同。
我希望能帮助解释这些差异。
>>> 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']
这不适用于重音字母... – EOL
也许这不是@EOL。正则表达式 - 这取决于。在thouzands字符串中,正则表达式比JBernardo的解决方案快几倍(可以用'timeit'来检查)。他们也是最灵活的,以防任务变得更加复杂,然后只是“一个或一个”。 – hamstergene
+1:显式和高效(在长字符串上)。 – EOL
这是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工具使这一切变得简单,但这是专门为此工作制作的工具。
如果你想从事的函数式编程范式多一点:
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'
我建议你看看邓肯的回答,因为我相信这将是一个大名单上要好得多。事实上,就在你的名单上,他的答案几乎快了6倍,经过测试,具有timeit模块 – pyInTheSky
@jwesonga:你能指定如何处理字母'a'和'A'吗?事实上,有些答案将'阿尔伯塔'转变为'阿尔伯塔',而另一些则将其转化为'阿尔伯塔'。 – EOL
也可以说你想用重音字母做什么? – Duncan