来自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的建议?
答案 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