上次分享了一道有趣的字符串面试题,今天我们再重新审视下这道题,并借此机会了解下python库的强大。
上次的原题是这样的:
给定一个字符串,求字符串中连续相同的字符的个数, 例如给定字符串“abbcccdxt”,输出[‘a1’,’b2’,’c3’,’d1’,’x1’,’t1’]。
我原来的解决方法如下:
后来有同学在评论中指出,有更好的解决方案,我们使用下看看。
OrderedDict
The OrderedDict API is substantially the same as regular dictionaries but will iterate over keys and values in a guaranteed order depending on when a key was first inserted. If a new entry overwrites an existing entry, the original insertion position is left unchanged. Deleting an entry and reinserting it will move it to the end.
Usage
1234567 d = OrderedDict()d['parrot'] = 'dead'd['penguin'] = 'exploded'd.update({'foo': 'bar'})print(d.items())#output:odict_items([('parrot', 'dead'), ('penguin', 'exploded')])
dict.setdefault(key, default=None)
如果字典中包含有给定键,则返回该键对应的值,否则返回为该键设置的值
map(function, iterable, …)
map() 会根据提供的函数对指定序列做映射。
第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。
2。 上题我们来变形下,我要求得出如下结果 [‘aa’, ‘bb’, ‘ccc’, ‘d’, ‘x’, ‘t’]
|
|
3。 我们再变下,求字符串中连续相同个数是3的字符,比如打印出‘ccc’。‘bb’由于字符数2个相同不打印出
|
|
filter(function, iterable)
filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回由符合条件元素组成的新列表。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。
4。 最后,再来“作”一下,我现在不要求连续相同了,我要求得出字符串中所有3个字符的重复个数,比如字符串“abccbbcc”,我们会得到’abc’, ‘bcc’, ‘ccb’, ‘cbb’, ‘bbc’, ‘bcc’这些长度为3的字符,其中“bcc”出现2次,其它都出现一次。我们要实现它。
|
|
这个题目,有各种变形,比如我现在要求出字符串的所有子集, 例如 给你‘123’我要得到[[‘1’], [‘2’], [‘3’], [‘1’, ‘2’], [‘2’, ‘3’], [‘1’, ‘2’, ‘3’]]
|
|
怎么样,这一圈下来明白python的标准库有多强大了吧, 作为一个pythoner,一定要足够pythonic.