排除列表中的第一个项目 - python
我有一个字符串:
n = 'my fancy extension'
还有
''.join([ x.capitalize() for x in n.split() ])
我得到的是 MyFancyExtension
,但我需要的是 myFancyExtension
。
我该怎么做才能避免把列表中的第一个项目首字母大写,或者如果只指定一个单词就完全不大写呢?
6 个回答
l = n.split()
if len(l)>1:
print l[0] + ''.join([ x.capitalize() for x in l[1:] ])
else:
print l[0]
或者
import re
print re.sub(" ([a-z])", lambda s: s.group(1).upper(), n)
所以,在Python里没有什么可以让我说这样的话:''.join([ x.capitalize() for x in l --如果x不是第一个元素-- ]),中间的部分是某种索引测试吗?
其实你可以用Python的三元运算符来实现这样的效果:
x if Condition else y
或者,在这个例子中,
x.capitalize() if Condition else x.lower()
比如说:
>>> def camel(my_string):
... my_list = my_string.split()
... return ''.join([x.lower() if x is my_list[0] else x.capitalize() for x in my_list])
>>> camel("lovely to be here")
'lovelyToBeHere'
这里的'x'是一个字符串,'condition'是 if x是my_list[0]
,而两个选项当然是 x.lower()
和 x.capitalize()
。
这也挺不错的,因为如果你搞错了第一个部分,它会自动把它变成小写 :)
>>> camel("WHat is the problem")
'whatIsTheProblem'
>>>
在大多数编程语言中,它的写法是 if Condition x else y
的顺序,而不是 x if Condition else y
,所以很多Python的用户会避开它,但我个人觉得Python的三元运算符挺酷的。
我不太喜欢复杂的单行代码,不过:
>>> words = "my fancy extension"
>>> ''.join([x.capitalize() if i else x for (i, x) in enumerate(words.split())])
'myFancyExtension'
在Python 3中,你可以这样做:
n = 'my fancy extension'
first,*rest = n.split()
''.join([first] + [x.capitalize() for x in rest])
Out[10]: 'myFancyExtension'
但是在Python 2中,没有那种炫酷的扩展元组解包语法,所以你需要多做一步(哎呀!):
spl = n.split()
first,rest = spl[0],spl[1:]
在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用这些数据。这个过程就像是从冰箱里拿食材,然后用这些食材做饭。
有些时候,我们会遇到一些问题,比如数据的格式不对,或者数据不完整。这就像是你打开冰箱,发现缺少了做菜的某个重要食材,导致你不能做出想要的菜。
为了避免这些问题,程序员通常会在代码中加入一些检查,确保数据是正确的。这就像是在做饭之前,先检查一下冰箱里的食材是否齐全。
如果数据有问题,程序会给出错误提示,告诉你哪里出错了。这就像是你在做饭时发现缺少盐,程序会提醒你加盐。
总之,处理数据就像做饭一样,需要仔细检查,确保一切都准备好,才能做出美味的菜肴。
>>> n = 'my fancy extension'
>>> array = n.split()
>>> array[0] + ''.join(map(str.capitalize, array[1:]))
'myFancyExtension'