排除列表中的第一个项目 - python

3 投票
6 回答
8305 浏览
提问于 2025-04-18 06:49

我有一个字符串:

n = 'my fancy extension'

还有

  ''.join([ x.capitalize() for x in n.split() ])

我得到的是 MyFancyExtension,但我需要的是 myFancyExtension

我该怎么做才能避免把列表中的第一个项目首字母大写,或者如果只指定一个单词就完全不大写呢?

6 个回答

1
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)
2

所以,在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的三元运算符挺酷的。

3

我不太喜欢复杂的单行代码,不过:

>>> words = "my fancy extension"
>>> ''.join([x.capitalize() if i else x for (i, x) in enumerate(words.split())])
'myFancyExtension'
3

在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:]
3

在编程中,有时候我们需要处理一些数据,比如从一个地方获取数据,然后在程序中使用这些数据。这个过程就像是从冰箱里拿食材,然后用这些食材做饭。

有些时候,我们会遇到一些问题,比如数据的格式不对,或者数据不完整。这就像是你打开冰箱,发现缺少了做菜的某个重要食材,导致你不能做出想要的菜。

为了避免这些问题,程序员通常会在代码中加入一些检查,确保数据是正确的。这就像是在做饭之前,先检查一下冰箱里的食材是否齐全。

如果数据有问题,程序会给出错误提示,告诉你哪里出错了。这就像是你在做饭时发现缺少盐,程序会提醒你加盐。

总之,处理数据就像做饭一样,需要仔细检查,确保一切都准备好,才能做出美味的菜肴。

>>> n = 'my fancy extension'
>>> array = n.split()
>>> array[0] + ''.join(map(str.capitalize, array[1:]))
'myFancyExtension'

撰写回答