Scrivere una funzione filter_prime(lst) che riceve una lista di numeri interi positivi e restituisce una nuova lista contenente solo i numeri primi della lista originale.
def is_prime(num):
if num <= 1:
return False
for i in range(2, num):
if num % i == 0:
return False
return True
def filter_prime(lst):
new_list = []
for num in lst:
if is_prime(num):
new_list.append(num)
return new_list
# versione con list comprehension
def filter_prime_v2(lst):
return [num for num in lst if is_prime(num)]
print(filter_prime([1, 2, 4, 5, 3, 8, 7, 11, 29, 31, 49]))
print(filter_prime_v2([1, 2, 4, 5, 3, 8, 7, 11, 29, 31, 49]))
Scrivere una funzione find_couples(lst, target) che riceve una lista di numeri interi lst e un numero intero target e restituisce una lista di tuple. Ogni tupla contiene due numeri diversi della lista originale che, sommati, danno come risultato il target. La funzione non deve includere coppie duplicate o invertite (ad esempio (3, 5) e (5, 3) non devono comparire entrambe).
def find_couples(lst, target):
output = []
for num1 in lst:
for num2 in lst:
if num1 != num2 and num1 + num2 == target and (num1, num2) not in output and (num2, num1) not in output:
output.append((num1, num2))
return output
print(find_couples([1, 2, 3, 4, 5, 6, 7], 8))
Scrivere una funzione substitute(lst, sublst, new_sublist) che riceve tre parametri: una lista principale lst, una sottolista da cercare nella lista principale sublst e una nuova sottolista che la sostituirà new_sublist. La funzione deve restituire una nuova lista in cui tutte le occorrenze della sottolista sublst nella lista principale sono sostituite dalla sottolista new_sublist. La funzione deve funzionare anche con sottoliste di lunghezza variabile.
def substitute(lst, sublst, new_sublst):
i = 0
new_list = []
while i < len(lst):
if lst[i:i+len(sublst)] == sublst:
new_list.extend(new_sublst)
i += len(sublst)
else:
new_list.append(lst[i])
i += 1
return new_list
print(substitute([1, 2, 3, 4, 2, 3, 5], [2, 3], [9, 3, 9]))
Scrivere una funzione max_sum_non_adjacent_3(lst) che riceve una lista di numeri interi positivi lst e calcola la somma massima ottenibile sommando tre elementi non adiacenti nella lista. Si può assumere che la lista abbia almeno 5 elementi.
def max_sum_non_adjacent_3(lst):
if len(lst) < 5:
return None
max_sum = 0
for i in range(len(lst)):
for j in range(i+2, len(lst)):
for z in range(j+2, len(lst)):
if lst[i] + lst[j] + lst[z] > max_sum:
max_sum = lst[i] + lst[j] + lst[z]
return max_sum
print(max_sum_non_adjacent_3([1, 8, 3, 10, 5]))
print(max_sum_non_adjacent_3([2, 1, 1, 1, 10, 4, 6, 9]))
Scrivere una funzione max_sum_non_adjacent(lst) che riceve una lista di numeri interi positivi lst e calcola la somma massima ottenibile sommando elementi non adiacenti nella lista.
def max_sum_non_adjacent(lst):
max_sum = 0
max_without_prev = 0
for i in range(len(lst)):
with_i = max_without_prev + lst[i]
max_without_prev = max_sum
if with_i > max_sum:
max_sum = with_i
return max(max_sum, max_without_prev)
print(max_sum_non_adjacent([2, 1, 1, 1, 10, 4, 6, 9]))