Python 制作具有可变大小的列表的列表

Python 制作具有可变大小的列表的列表,python,list,Python,List,我正在编写一个程序,它最多可以接受五个数字,并找出它们是否为素数。如果一个数字不是素数,它会找到它们的素数因子。然后,它将计算初始数字的LCM。到目前为止,我编写的代码如下: def prime(n): if n > 1: for i in range (2,n): if n % i == 0: return False return True def length(n): if len(n)

我正在编写一个程序,它最多可以接受五个数字,并找出它们是否为素数。如果一个数字不是素数,它会找到它们的素数因子。然后,它将计算初始数字的LCM。到目前为止,我编写的代码如下:

def prime(n):
    if n > 1:
        for i in range (2,n):
            if n % i == 0:
                return False
    return True
def length(n):
    if len(n) > 5:
        return True
    return False
toggle = False
enter_numbers = True
zero_one_neg = True
square = False
prime_list = [ [] for i in range(100) ]
lcm_list = [ [] for i in range(100)]
while enter_numbers:
    nums = list(map(int, input('\nEnter up to five natural numbers greater than 1 separated by commas. Enter at least two if you want to calculate their LCM: ').split(',')))
    for i in range (len(nums)):
        if nums[i] <= 1:
            zero_one_neg = True
            print('\nNo zeroes, ones or negatives. Start over. ')
            if length(nums) and zero_one_neg:
                print('\nNo more than five numberes. Start over. ')
                break
            break
        else:
            zero_one_neg = False
    if length(nums) and not zero_one_neg:
        print('\nNo more than five numbers. Start over. ')
    elif not length(nums) and not zero_one_neg:
        enter_numbers = False
for i in range (len(nums)):
    for j in range (2,nums[i]):
        if nums[i] % j == 0:
            lcm_list[i].append(j)
            if prime(j):
                prime_list[i].append(j)
            toggle = True
    if not toggle:
        print('\n', nums[i] ,'is a prime number.')
    if toggle:
        print('\n', nums[i] ,'is not a prime number. It\'s prime factors are: ',prime_list[i])
        print(lcm_list[i])
        toggle = False
print(len(prime_list))

当然,这还不完整。它运行正常,但我不喜欢这样的事实,我必须预设素数列表和lcm列表的大小。如何动态设置它们的大小?

您可以将它们初始化为空列表,并为每次迭代追加一个新的空子列表,而不是使用一定数量的空子列表初始化列表:

lcm_list = []
prime_list = []
for i in range(len(nums)):
    lcm_list.append([])
    prime_list.append([])
    for j in range(2, nums[i]):
        ...

您可以将列表初始化为空列表,并为每次迭代追加一个新的空子列表,而不是使用一定数量的空子列表初始化列表:

lcm_list = []
prime_list = []
for i in range(len(nums)):
    lcm_list.append([])
    prime_list.append([])
    for j in range(2, nums[i]):
        ...

追加时,只需将值放在方括号中,即可将列表添加到列表中

a = []
b = [2,3]
c = [3]

#start with an empty array
print(a)
#[]

#add additional lists with whatever, this one has 2 values
a.append(b)
print(a)
#[[2, 3]]

#this just pushes the one
a.append(c)
print(a)
#[[2, 3], [3]]

追加时,只需将值放在方括号中,即可将列表添加到列表中

a = []
b = [2,3]
c = [3]

#start with an empty array
print(a)
#[]

#add additional lists with whatever, this one has 2 values
a.append(b)
print(a)
#[[2, 3]]

#this just pushes the one
a.append(c)
print(a)
#[[2, 3], [3]]

大家好,为了获得可靠答案,请在提问时参考此链接。首先为什么要限制lcm_列表和prime_列表,首先删除列表中的迭代,然后按正常值追加,这样当您有一个素数时,它的LCM将以动态方式追加到列表中。或者您可以使用字典而不是列表。@FishingCode您可以提供与您所说的代码等效的代码吗?因此,您创建的两个列表现在都是嵌套列表吗?第一个问题是你想达到什么目的?如果您想动态设置它们的大小,则必须删除两个列表中的硬编码迭代:-嗨,为了获得可靠答案的最佳机会,请在提问时参考此链接。首先为什么要约束lcm_列表和prime_列表,首先删除列表中的迭代,然后按正常值追加,这样当您有一个素数时,它的LCM将以动态方式追加到列表中。或者您可以使用字典而不是列表。@FishingCode您可以提供与您所说的代码等效的代码吗?因此,您创建的两个列表现在都是嵌套列表吗?第一个问题是你想达到什么目的?如果要动态设置其大小,则必须删除两个列表中的硬编码迭代:-