Как очистить все элементы из списка списков в отдельный список - PullRequest
0 голосов
/ 18 марта 2020

Я новичок в Python и программировании в целом, так что, возможно, есть простой способ сделать это без особых хлопот. Код, который я написал до сих пор, таков (я даю вам весь код для контекста):

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


def list_filter(lista):
    return [x for x in lista if x]


toggle = False
enter_numbers = True
zero_one_neg = True
prime_list = []
lcm_list = []
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 numbers. 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)):
    lcm_list.append([])
    prime_list.append([])
    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])
        toggle = False
filtered_lcm_list = list_filter(lcm_list)
filtered_prime_list = list_filter(prime_list)
for i in range(len(filtered_lcm_list)):
    l = list(map(int, filtered_lcm_list[i]))
print(l)
print(filtered_lcm_list)

Проблема в этом разделе:

for i in range(len(filtered_lcm_list)):
    full_list = list(map(int, filtered_lcm_list[i]))
print(full_list)
print(filtered_lcm_list)

Если я введите, скажем, 88,77, я получаю этот вывод:

Enter up to five natural numbers greater than 1 separated by commas. Enter at least two if you want to calculate their LCM: 88,77

 88 is not a prime number. It's prime factors are:  [2, 11]

 77 is not a prime number. It's prime factors are:  [7, 11]
[7, 11]
[[2, 4, 8, 11, 22, 44], [7, 11]]

Process finished with exit code 0

Я хочу, чтобы full_list содержал все элементы filtered_lcm_list, но не как список списков.

1 Ответ

1 голос
/ 18 марта 2020

Как насчет этого?

full_list = [int(i) for sub_list in filtered_lcm_list for i in sub_list]

При этом используется понимание списка, сначала итерируя по спискам, содержащимся в filtered_lcm_list, затем по элементам в каждом из этих вложенных списков.

Если вы не хотите возвращать повторяющиеся числа, вы можете использовать набор значений:

full_list = {int(i) for sub_list in filtered_lcm_list for i in sub_list]}

и преобразовать его обратно в список, используя list(full_list), если вы sh.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...