首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使这个简单的字符串函数"pythonic“

如何使这个简单的字符串函数"pythonic“
EN

Stack Overflow用户
提问于 2015-09-16 06:01:15
回答 5查看 261关注 0票数 5

我来自C/C++世界,是一个Python,我编写了这个简单的string函数,它接受一个输入字符串(保证是ASCII)并返回最后四个字符。如果少于四个字符,我想用字母“A”来填补领导位置。(这不是一项练习,而是另一项复杂职能的宝贵部分)

有几十种方法,从蛮力,到简单,再到优雅。我下面的方法,虽然很实用,但看起来并不是"Pythonic“。

注意:我目前正在使用Python2.6,性能不是问题。输入字符串很短(2-8个字符),我只调用了几千次这个函数。

代码语言:javascript
复制
def copyFourTrailingChars(src_str):

    four_char_array = bytearray("AAAA")
    xfrPos = 4

    for x in src_str[::-1]:
        xfrPos -= 1
        four_char_array[xfrPos] = x
        if xfrPos == 0:
            break

    return str(four_char_array)


input_str = "7654321"
print("The output of {0} is {1}".format(input_str, copyFourTrailingChars(input_str)))

input_str = "21"
print("The output of {0} is {1}".format(input_str, copyFourTrailingChars(input_str)))

产出如下:

代码语言:javascript
复制
The output of 7654321 is 4321
The output of 21 is AA21

皮索纳人的建议?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-09-16 06:08:49

我将使用简单的切片,然后使用str.rjust()来正确地使用A作为fillchar对结果进行验证。例子-

代码语言:javascript
复制
def copy_four(s):
    return s[-4:].rjust(4,'A')

演示-

代码语言:javascript
复制
>>> copy_four('21')
'AA21'
>>> copy_four('1233423')
'3423'
票数 27
EN

Stack Overflow用户

发布于 2015-09-16 06:30:32

您可以简单地在原始字符串之前添加四个前哨'A‘字符,然后取结束的四个字符:

代码语言:javascript
复制
def copy_four(s):
    return ('AAAA'+s)[-4:]

够简单的了!

票数 5
EN

Stack Overflow用户

发布于 2015-09-16 06:06:32

带字符串格式的东西怎么样?

代码语言:javascript
复制
def copy_four(s):
    return '{}{}{}{}'.format(*('A'*(4-len(s[-4:])) + s[-4:]))

结果:

代码语言:javascript
复制
>>> copy_four('abcde')
'bcde'
>>> copy_four('abc')
'Aabc'

这里有一个更好、更规范的选项:

代码语言:javascript
复制
def copy_four(s):
    return '{:A>4}'.format(s[-4:])

结果:

代码语言:javascript
复制
>>> copy_four('abcde')
'bcde'
>>> copy_four('abc')
'Aabc'
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32600848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档