DevGang
Авторизоваться

9 лайфхаков со списками и словарями Python для следующего собеседования по программированию 

Списки и словари являются одними из наиболее часто используемых структур данных для программирования на Python.

В этом посте я делюсь 9 лайфхаками для списков и словарей Python. Поскольку списки и словари являются одними из наиболее часто используемых структур данных в Python, понимание и способность использовать эти фрагменты кода для различных вариантов использования позволит вам стать лучшим программистом на следующем собеседовании.

1. Сглаживание списка

Когда вам дан многоуровневый список или массив, который не является одномерным, вы можете захотеть сгладить его до простого списка.

lst = [[2,3], [4,5], [6,7]]

# Use List Comprehension

flatten\_lst = [i for j in lst for i in j ]

flatten\_lst  
>> [2,3,4,5,6,7]

2. Самый частый элемент в списке

Функция Counter из пакета Collections удобна для отслеживания количества различных элементов в списке. Пакет Collections является пакетом по умолчанию и поэтому не требует дополнительной установки, если у вас уже установлен Python.

import Counter from collections

l = [1,1,3,4,1,5,6,7,7,2,9]

freq_element = Counter(1).most_common()[0][0]

freq_element
>> 1

3. Распечатайте все комбинации списка

Напоминаем, что комбинация — это математический метод, который определяет количество возможных расположений в наборе элементов, где порядок выбора не имеет значения.

Пакет Itertools, как следует из названия, содержит множество функций, включающих итерации. Комбинации также требуют итераций и поэтому включены в этот пакет в двух разных формах (т.е. combinations, combinations_with_replacement) в зависимости от того, что именно вы ищете. Itertools также является пакетом по умолчанию в Python.

from itertools import combinations, combinations_with_replacement

nums = [1,2,3,4]

list(combinations(nums,2))

>> [[(1,2,), (1,3), (1,4), (2,3), (2,4), (3,4)]

list(combinations_with_replacement(nums,2))

>> [[(1,1),(1,2),(1,3),(1,4),(2,2),(2,3),(2,4),(3,3),(3,4),(4,4)]

list(combinations(nums,3))

>> [(1,2,3),(1,2,4),(1,3,4),(2,3,4)]

4. Инвертировать словарь

from collections import defaultdict

def invert_dict(obj):

inv_obj = defaultdict(list)

for key, value in obj.items():

inv_obj[value].append(key)

return dict(inv_obj)

## Example

food= {

'cookie': 10,

'cake': 10,

'ramen': 3,

}

invert_dict(food)
>> { 10: ['cookie', 'cake'], 3: ['ramen'] }

5. Комбинируйте словарные значения

Defaultdict — это подкласс класса словаря, который возвращает объект, подобный словарю. Чем это отличается от обычного словаря? Хотя словарь и словарь по умолчанию почти идентичны, последний позволяет нам избежать KeyErrors. Другими словами, он предоставляет значение по умолчанию для несуществующего ключа. Эта характеристика defaultdictionary упрощает следующие операции.

from collections import defaultdict

def comb_dict_val(*dicts):
    res = defaultdict(list)
    for d in dicts:
        for key in d:
            res[key].append(d[key])
    return dict(res)


# Example

d1 = {'a': 1, 'b': 'hi', 'c': 10}

d2 = {'a': 2, 'b': 'josh', 'd': 20}

comb_dict_val(d1,d2)
>> {'a': [1, 3], 'b': ['hi', 'josh'], 'c': [10], 'd': [20]}

6. Сортировать список, используя другой список в качестве индексов

def sort_by_index(lst, indexes, reverse=False):
     new_list = \
     [val for (_, val) in sorted(zip(indexes, lst), \
      key=lambda x: x[0], reverse=reverse)]
     return new_list

a = ['jake', 'amy', 'christine', 'fernando', 'david', 'hosea']
b = [3, 2, 6, 4, 1, 5]

sort_by_index(a, b) 
>> ['david', 'amy', 'jake', 'fernando', 'hosea', 'christine']

7. Группируйте различные элементы в списке на основе некоторого условия и превращайте его в словарь.

from collections import defaultdict

def group_by(lst, fn):
    d = defaultdict(list)
    for el in lst:
        d[fn(el)].append(el)
    return dict(d)
from math import floor


# Example

group_by([6.1, 4.2, 6.3], floor)
>> {4: [4.2], 6: [6.1, 6.3]}
group_by(['one', 'two', 'three'], len)
>> {3: ['one', 'two'], 5: ['three']}

8. Реализуйте перетасовку списков без использования готовых функций

Используем алгоритм Фишера-Йейтса. Он создает беспристрастные случайные перестановки списков, что часто имеет решающее значение для выборки. Популяризированный Кнутом, он беспристрастен, имеет оптимальную линейную эффективность по времени; использует постоянное пространство; и является инкрементным.

from random import randint

def shuffle(lst):
     temp_lst = deepcopy(lst)
     m = len(temp_lst)
     while (m):
        m -= 1
        i = randint(0, m)
        temp_lst[m], temp_lst[i] = temp_lst[i], temp_lst[m]
     return temp_lst

# Example

foo
>> [1, 2, 3]

shuffle(foo)

foo
>> [2, 3, 1]

9. Проверьте, удовлетворяет ли каждый элемент списка какому-либо условию

def every(lst, fn = lambda x: x):
     return all(map(fn, lst))

# Example

every([4, 2, 3], lambda x: x > 1)
>> True

#Python
Комментарии
Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу