在Python中反向迭代并每隔n个字符拆分字符串

3
我正在开发一个将数字转换为二进制和相反方向的程序。当用户输入如 1011110110 的二进制字符串时,它会被转换为十进制并打印出来。我还想打印出用户输入的字符串,如10 1111 0110
我已经尝试过:
print("Binary \t=\t " + ' '.join(binaryString[i:i+4] for i in range(0, len(binaryString), 4)))

这段代码将输出为1011 1101 10。我希望空格从字符串的末尾向前开始,就像 10 1111 0110


你可以通过在字符串左侧添加空格,使得切片操作能够正常工作:s = ' '*(len(s) % 4) + s - user5386938
4个回答

2
你可以使用模块%操作符来知道有多少个“溢出”数字,然后将余数每4个一组进行分割:
def  neat_print(s):
    ls = len(s)
    start = ls % 4
    rv, s = s[:start], s[start:]
    return ' '.join([rv] + [s[i:i+4] for i in range(0,ls-start,4)]).strip()

for k in ["1010101010"[:end] for end in range(2,10)]:
    print(k, "->", neat_print(k))

输出:

10 -> 10
101 -> 101
1010 -> 1010
10101 -> 1 0101
101010 -> 10 1010
1010101 -> 101 0101
10101010 -> 1010 1010
101010101 -> 1 0101 0101

2
您可以使用递归方法:
```html

您可以使用递归方法:

```
def rGroup(S,size=4,sep=" "):
    return S if len(S)<=size else rGroup(S[:-size],size,sep) + sep + S[-size:]

输出:

rGroup('1010101010') # '10 1010 1010'

rGroup('12345678',3,',') # '12,345,678'

binaryString = "1011110110"    
print("Binary \t=\t " + rGroup(binaryString)) # Binary  =    10 1111 0110

1
只需在代码中的两个位置添加 [::-1]
' '.join(binaryString[::-1][i:i+4] for i in range(0, len(binaryString), 4))[::-1]

p.s [::-1] 可以翻转字符串,因此您只需要将其反转,按照您的方式添加空格,然后再次反转以恢复初始顺序。


我尝试了你说的,这是我的结果 输入二进制数或-1停止:111000000111二进制=0111 0000 1110 - Saph_1991
binaryString = "111000000111" ' '.join(binaryString[::-1][i:i+4] for i in range(0, len(binaryString), 4))[::-1] '1110 0000 0111' - Szymon Kowaliński
你在两个地方都放置了 [::-1] 吗? - Szymon Kowaliński
print("二进制\t=\t" + ' '.join(binaryString[::-1][i:i+4] for i in range(0, len(binaryString), 4)[::-1])) - Saph_1991
你把第二个 [::-1] 放错位置了。 - Szymon Kowaliński
1
print("Binary \t=\t " + ' '.join(binaryString[::-1][i:i+4] for i in range(0, len(binaryString), 4))[::-1]) - Szymon Kowaliński

0

你需要确定光标的起始位置,以便在开头打印出正确的数字。

string_length = len(binaryString)

# Start position is the remainder when dividing by 4
start_pos = string_length % 4

output_items = []

# Get first item
if start_pos > 0:
 output_items.append(binaryString[0:start_pos])

# Go through the remainder of the string
for i in range(start_pos, string_length, 4):
 output_items.append(binaryString[i:i+4])

print("Binary \t=\t " + ' '.join(output_items))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接