如何分隔字符串中的大写字母和小写字母

2024-10-02 14:21:39 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一段代码,在‘偶数’和‘奇数’索引处分隔字符,我想修改它,以便它按大写/小写分隔字符。我不知道如何对"AbBZxYp"这样的字符串执行此操作。我试过使用.lower.upper,但我觉得我用错了。在

def upperLower(string):
    odds=""
    evens=""
    for index in range(len(string)):
        if index % 2 == 0:
            evens = evens + string[index]
        if not (index % 2 == 0):
            odds = odds + string[index]
    print "Odds: ", odds
    print "Evens: ", evens

Tags: 字符串代码stringindexif字符lower奇数
3条回答
>>> filter(str.isupper, "AbBZxYp")
'ABZY'
>>> filter(str.islower, "AbBZxYp")
'bxp'

顺便说一句,对于奇数/偶数索引,您可以这样做:

^{pr2}$

你想得到两个字符串,一个是大写字母,另一个是小写字母?下面是一个函数,它将返回两个字符串,先是大写,然后是小写:

def split_upper_lower(input):
    upper = ''.join([x for x in input if x.isupper()])
    lower = ''.join([x for x in input if x.islower()])

    return upper, lower

然后可以使用以下命令调用它:

^{pr2}$

它提供两个变量,upper和{}。必要时使用。在

有一个名为partition的itertools配方可以做到这一点。实现如下:

来自itertools recipes

def partition(pred, iterable):
    'Use a predicate to partition entries into false entries and true entries'
    # partition(is_odd, range(10))  > 0 2 4 6 8   and  1 3 5 7 9
    t1, t2 = tee(iterable)
    return filterfalse(pred, t1), filter(pred, t2)

大小写字母

您可以手动实现后一个配方,或者安装一个实现它的库,例如^{}

^{pr2}$

这里partition使用一个谓词函数来确定iterable中的每个项是否都是小写的。如果没有,则过滤到false组中。否则,它将被过滤到true项组中。我们迭代以暴露这些组。在


奇偶指数

您可以修改此项,以便也适用于奇数和偶数索引:

import itertools as it

import more_itertools as mit


iterable = "AbBZxYp"
pred = lambda x: x[0] % 2 != 0

children = mit.partition(pred, tuple(zip(it.count(), iterable)))
[[i[1] for i in list(c)] for c in children]
# [['A', 'B', 'x', 'p'], ['b', 'Z', 'Y']]

这里我们zip一个^{}对象来枚举iterable。然后我们迭代子项,使子项只产生字母。在

有关更多工具,请参见^{} docs。在

相关问题 更多 >