如何有效地在数字内插入大量数字?

时间:2019-04-12 06:29:21

标签: python

说我有一个数字x,使x.length =500。在位置5和8的左边说,我想插入一个数字。但是我想插入一个数字,使它可以遍历所有数字。因此,从本质上讲,它经历了所有10 ^ 2的可能性。

然后,我想尝试所有可能性并执行“ if语句”以返回正确的可能性。

我考虑过将其更改为字符串,将其插入所需的位置,然后将其更改回数字。但是我认为这可能效率不高。然后,如果我想检查所有数字,效率会进一步降低。

我非常关心效率,因为我的目的是插入两个以上的数字。我想在位置125、315等7或8,依此类推。这很大(10 ^ 8)。我也想再次检查所有这些数字。

我尚未编写代码,因为我不知道如何正确执行此操作。

对不起,我的英语水平

2 个答案:

答案 0 :(得分:0)

将500位数字转换为字符串,然后转换为列表,然后转换为数字

# Here's an example of a long number
big_number = 1111111111111111111111111111111111111111111111111

# Make it a string
big_number_string = str(big_number)

# Add each char to a list
big_num_list = [y for y in big_number_string]
# ['1','1','1','1','1',...]

# Insert '0' at index 10
big_num_list.insert(10, '0')
# [...'1','1','1','0','1',...]

# Join everything together and make it a number again
big_num_new = int(''.join(big_num_list))

print(big_num_new)
>> 11111111110111111111111111111111111111111111111111

答案 1 :(得分:0)

import itertools

def gen_candidates(number, indices):
    # inserting at an index will make all larger indices off by one
    powers_of_ten = [10 ** (i + index) for i, index in enumerate(sorted(indices))]

    for power in powers_of_ten:
        everything_less = number % power
        number = ((number - everything_less) * 10) + everything_less

    for value_at_digit in itertools.product(range(10), repeat=len(indices)):
        yield number + sum(
            value * power for value, power in zip(value_at_digit, powers_of_ten)
        )


result = list(gen_candidates(11111111111111111111111111111, [0, 0, 22, 14, 6, 7, 7, 8]))
print(len(result), result[0], result[-1])
# 100000000 1111111011111111011111101001011111100 1111111911111111911111191991911111199

然后您可以像这样使用此生成器

# will try 12304050, 12304051, 12304052 etc.
for number in gen_candidates(12345, [0, 1, 2]):
    if is_the_right_one(number):
        do_whatever(number)

有了8个索引,在我的桌面上大约需要2分钟。 for循环会在其他数字更改时一遍又一遍地添加相同的数字,因此您可以稍微提高性能。或以更快的语言重写代码。