如何生成一个数字序列1111222233334444....9999...?

How to generate a number sequence 1111222233334444....9999...?

提问人:libing bai 提问时间:1/9/2023 最后编辑:luk2302libing bai 更新时间:1/9/2023 访问量:100

问:

我想生成111122223333....一个数字序列,每个数字出现相同的次数,直到某个数字。


我使用 python for 循环来生成数字序列,但是当结束数字为 7000 时会花费太多时间。

import pandas as pd

startNum = 1
endNum = 7000
sequence = []
for i in range(endNum):  
   for j in range(endNum):
       sequence.append(i)
print(i)

那么我应该怎么做才能减少时间,并获得我的序列呢?无论使用哪种方法,都不包括 Excel。谢谢!

我想获得数字顺序111122223333

Python 数字 序列

评论

2赞 luk2302 1/9/2023
你打算用这个序列做什么?A 在这里可能非常有用。我怀疑序列生成需要很长时间,但序列的打印是实际的瓶颈。generator
0赞 Jeanot Zubler 1/9/2023
@luk2302他甚至没有打印序列。在我相当强壮的笔记本电脑上生成列表需要 3.8 秒......
0赞 luk2302 1/9/2023
你是绝对正确的,读错了。不过,其他几点是......是的,生成 50M 条目需要一些时间。print
0赞 libing bai 1/9/2023
我发现我可以在两分钟内用 C++ 完成,但是 python 呢?

答:

0赞 Ronin 1/9/2023 #1

我不知道为什么,但是

endnum = 7
''.join([f"{str(i)*4}" for i in range(endnum)])

print(result)

结果

0000111122223333444455556666

它需要不到 1 秒的时间endnum = 7000

0:00:00.006550
0赞 Youyoun 1/9/2023 #2

因此,您的代码并没有真正按照您的要求执行,因此我将添加一些关于您的代码的功能的注释,以了解它在哪里不起作用,并为您提供一个符合您想要的答案。

import pandas as pd

startNum = 1 
endNum = 7000
sequence = []
for i in range(endNum): # Here you are looping from 1 to endNum = 7000 
    for j in range(endNum): # Here you are looping from 1 to endNum = 7000
        sequence.append(i) # You are adding i (7000 times because of your previous loop)
print(i) # You probably mean to print sequence ?

您可能希望根据所需的重复字符数(即 4)运行第二个循环。

下面是执行所需操作的代码:

startNum = 1
endNum = 7000
sequence = []
repeat = 4
for i in range(endNum):
    for _ in range(repeat):
        sequence.append(i)
print(sequence)

在你的情况下,我更喜欢使用扩展和列表推导(两个代码是等效的):

startNum = 1
endNum = 7000
sequence = []
repeat = 4
for i in range(endNum):
    sequence.extend([i for _ in range(repeat)])

评论

0赞 libing bai 1/10/2023
是的,你是对的。我想输出序列。print(i) 是错误的。它运行得非常快。谢谢。
0赞 kev_ta 1/9/2023 #3

您可以尝试以下操作:

startNum = 1
endNum = 5 

seq = [ (str(i+1))*endNum for i in range(endNum) ]
print("".join(seq))

评论

0赞 libing bai 1/10/2023
谢谢。str 操作实际上比 num 操作更快。