Scrivere una funzione split_list(lst, n) che riceva in input una lista lst e un numero intero n, e restituisca una nuova lista composta da sottoliste consecutive di lunghezza n. Se la lista originale non è divisibile esattamente per n, gli elementi rimanenti devono essere inseriti in una sottolista più corta alla fine.
def split_list(lst, n):
if n <= 0:
return None
sublist = []
index = 0
while index < len(lst):
sublist.append(lst[index:index+n])
index += n
return sublist
Scrivere una funzione find_most_frequent(lst) che trovi l’elemento che occorre più spesso all'interno della lista lst. Se due elementi diversi hanno lo stesso numero di occorrenze, restituire il primo in ordine di apparizione nella lista. Si può assumere che la lista non sia vuota.
def find_most_frequent(lst):
max_value = 0
max_element = None
for element in lst:
if max_value < lst.count(element):
max_value = lst.count(element)
max_element = element
return max_element
print(find_most_frequent([1, 2, 2, 3, 1, 2, 3, 2, 3, 3]))
Scrivere una funzione max_sublist(lst, m) che riceva in input una lista di numeri interi lst e un intero positivo m. La funzione deve trovare la sottolista di lunghezza esattamente 3 con la somma massima, ma con il vincolo che la somma sia minore di m. Se non esiste una sottolista che rispetta i vincoli, la funzione deve restituire una lista vuota.
def max_sublist(lst, m):
max_sum = None
max_element = []
for i in range(len(lst)):
for j in range(i+1, len(lst)):
for z in range(j+1, len(lst)):
current_sum = lst[i] + lst[j] + lst[z]
if (max_sum is None or current_sum > max_sum) and current_sum < m:
max_sum = current_sum
max_element = [lst[i], lst[j], lst[z]]
return max_element
Scrivere una funzione can_be_reached(lst, start, end) che riceve una lista di tuple contenenti la città di partenza e di arrivo di un treno, una città di partenza start e una città di arrivo end, e restituisce True se è possibile raggiungere la città end in treno partendo dalla città start.
def can_be_reached(lst, start, end):
reached = [start]
for element in reached:
if element == end:
return True
for connection in lst: # si può compattare così: for s, e in lst:
s, e = connection[0], connection[1]
if s == element and e not in reached:
reached.append(e)
return False