Python работа со списком
такая задача, есть список, например ['Slovakia, 2005', 'Slovakia, 2010', 'Slovakia, 2015', 'Slovakia, 2016', 'Slovakia, 2017', 'Slovenia, 1995', 'Slovenia, 2000', 'Slovenia, 2005', 'Solomon Islands, 2015', 'Solomon Islands, 2016', 'Solomon Islands, 2017', 'Somalia, 1990', 'Somalia, 1995', 'Somalia, 2000', 'Somalia, 2005',]
надо вывести новый список c разницей в кол-ве лет(например, "словакия 2017 - 2005 = 12 лет"), вот пример конечного результата:
['Slovakia, 12 лет', 'Slovenia, 10 лет' и т.д.]
т.к. я только учусь, максимум смог сделать так, работает, но стран в списке очень много и надо как то автоматизировать
list = []
result = []
for i in count_years:
if i.split(',')[0] == country[0]:
list.append(int(i.split(',')[1]))
result.append(f"{country[0]}, {list[-1] - list[0]} лет")
for i in count_years:
if i.split(',')[0] == country[1]:
list.append(int(i.split(',')[1]))
result.append(f"{country[1]}, {list[-1] - list[0]} лет")
print(result)
Ответы (2 шт):
Действия:
- Сбор данных, перебираю список стран с годами, вытаскиваю страну, год и заполняю словарь, где ключом будет страна, а значением список годов
- Перебор словаря стран с нахождением минимального и максимального года (тут кст можно вместо
minиmaxиспользовать сортировку), и генерацией результата
Пример:
countries = [
'Slovakia, 2005', 'Slovakia, 2010', 'Slovakia, 2015', 'Slovakia, 2016', 'Slovakia, 2017', 'Slovenia, 1995',
'Slovenia, 2000', 'Slovenia, 2005', 'Solomon Islands, 2015', 'Solomon Islands, 2016', 'Solomon Islands, 2017',
'Somalia, 1990', 'Somalia, 1995', 'Somalia, 2000', 'Somalia, 2005'
]
country_by_years = dict()
for x in countries:
country, year = x.split(', ')
if country not in country_by_years:
country_by_years[country] = []
country_by_years[country].append(int(year))
countries_diff = []
for country, years in country_by_years.items():
min_year, max_year = min(years), max(years)
countries_diff.append(f'{country} {max_year} - {min_year} = {max_year - min_year} лет')
print(countries_diff)
Результат:
['Slovakia 2017 - 2005 = 12 лет', 'Slovenia 2005 - 1995 = 10 лет', 'Solomon Islands 2017 - 2015 = 2 лет', 'Somalia 2005 - 1990 = 15 лет']
можно так:
lst = ['Slovakia, 2005', 'Slovakia, 2010', 'Slovakia, 2015', 'Slovakia, 2016', 'Slovakia, 2017', 'Slovenia, 1995',
'Slovenia, 2000', 'Slovenia, 2005', 'Solomon Islands, 2015', 'Solomon Islands, 2016', 'Solomon Islands, 2017',
'Somalia, 1990', 'Somalia, 1995', 'Somalia, 2000', 'Somalia, 2005',]
res = {}
[res.setdefault(x.split(",")[0], [int(x.split(",")[1])]).append(int(x.split(",")[1])) for x in lst]
res = [f"{k} - {(max(v)-min(v))} лет" for k, v in res.items()]
print(res)
['Slovakia - 12 лет', 'Slovenia - 10 лет', 'Solomon Islands - 2 лет', 'Somalia - 15 лет']