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

时间:2015-09-16 06:01:15

标签: python string

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

有许多方法可以做到这一点,从蛮力到简单到优雅。下面我的方法,虽然功能,但似乎不是“Pythonic”。

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

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

输出结果为:

The output of 7654321 is 4321
The output of 21 is AA21

Pythoneers的建议?

5 个答案:

答案 0 :(得分:27)

我会使用简单的切片,然后str.rjust()使用A作为fillchar来对结果进行右对齐。示例 -

def copy_four(s):
    return s[-4:].rjust(4,'A')

演示 -

>>> copy_four('21')
'AA21'
>>> copy_four('1233423')
'3423'

答案 1 :(得分:5)

你可以在原始字符串之前简单地添加四个标记'A'字符,然后取四个字符的结尾:

def copy_four(s):
    return ('AAAA'+s)[-4:]

这很简单!

答案 2 :(得分:4)

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

def copy_four(s):
    return '{}{}{}{}'.format(*('A'*(4-len(s[-4:])) + s[-4:]))

结果:

>>> copy_four('abcde')
'bcde'
>>> copy_four('abc')
'Aabc'

这是一个更好,更规范的选择:

def copy_four(s):
    return '{:A>4}'.format(s[-4:])

结果:

>>> copy_four('abcde')
'bcde'
>>> copy_four('abc')
'Aabc'

答案 3 :(得分:3)

您可以使用切片来获取最后4个字符,然后使用字符串重复(*运算符)和串联(+运算符),如下所示:

def trailing_four(s):
    s = s[-4:]
    s = 'A' * (4 - len(s)) + s
    return s

答案 4 :(得分:3)

你可以试试这个

def copy_four_trailing_chars(input_string)
  list_a = ['A','A','A','A']
  str1 = input_string[:-4]
  if len(str1) < 4:
    str1 = "%s%s" % (''.join(list_a[:4-len(str1)]), str1)
  return str1