В чем отличие Множеств, списков, массивов?

В чем отличие указателей и массивов на примере strlen()?
Здравствуйте уважаемые форумчаче. Появился вот такой вопрос. Почему функция strlen работает в.
В чем отличие многомерного массива (прямоугольного) от «зубчатых» массивов
Объясните пожалуйста в чем отличие многомерного массива(прямоугольного) от "зубчатых" массивов(т.е.
Отличие пар от списков
Правильно ли я понимаю, что списки от пар отличаются только тем, что в последней ячейке списка.

Пересечение списков-множеств
Здравствуйте, помогите, пожалуйста, решить задачу. Заранее благодарна. Определите функцию.
Регистрация: 02.10.2016
Сообщений: 62
AntonPr, Если в двух словах, то множество в python — «контейнер», содержащий не повторяющиеся элементы в случайном порядке. Списки в python это динамические массивы — упорядоченные изменяемые коллекции объектов произвольных типов у которых нет фиксированного размера.
Регистрация: 08.10.2008
Сообщений: 420

Сообщение было отмечено AntonPr как решение
Решение
В Python, массив это и есть список. Список может быть многомерным, т.е. каждый элемент списка может быть списком, каждый элемент которого, так же может быть списком и т.д. Более того, список может содержать в себе кортежи, словари и даже множества. А множество, это более узкое понятие. Его элементы не могут быть одинаковыми и они не индексируются, т.е. нельзя обратиться к какому-то одному элементу множества. Множества применяются, в основном, для фильтрации и выборки.
Регистрация: 05.11.2018
Сообщений: 55
А в чем тогда смысл использования множеств, если списки лучше, так сказать?
1303 / 843 / 409
Регистрация: 12.03.2018
Сообщений: 2,305
AntonPr, чем?
Регистрация: 08.10.2008
Сообщений: 420

Сообщение было отмечено ildwine как решение
Решение
Сообщение от AntonPr 
А в чем тогда смысл использования множеств, если списки лучше, так сказать?
Смысл в том, что только над множествами можно осуществлять такие операции как: объединение, пересечение, разность и т.п.
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Пересечение списков-множеств
Здравствуйте, помогите, пожалуйста, решить задачу. Заранее благодарна. Определите функцию.

Объединение списков-множеств
Уже часа два мучаюсь, трудно дается этот язык Определите функцию, на вход которой подаются два.

Пересечение списков-множеств
эта функция должна возвращать список из элементов, которые встречаются в каждом из двух.
Реализовать объединение списков-множеств
Здравствуйте дорогие форумчане! Помогите пожалуйста с задачей: Написать функцию union :: Eq a.

Организовать представление множеств в виде линейных однонаправленных списков
Даны два множества А и В. Организовать представление множеств в виде линейных однонаправленных.
В чем отличие
Господа,наверное, совсем простой для вас вопрос,но я путаюсь чем отличаются эти 2 обозначения?
Или воспользуйтесь поиском по форуму:
Структуры данных Python: списки, кортежи, словари, множества

Массивы данных в Python реализованы достаточно своеобразно, что сильно отличает его от других языков программирования. Если вы изучаете Python как второй язык, то его структуры мягко говоря, вызывают недоумение. Если же вы начнёте изучать другой язык после Python’а, то сильно удивитесь отсутствию списков, кортежей, словарей и множеств.
В других языках, да и вообще в программировании, такие структуры называются одним словом: массивы. Но в Python это приводит к путанице, поскольку используя синтаксис массивов, применяются другие названия, а под словом «массив» подразумевается вообще отдельная библиотека. Попробуем разобраться во всех этих хитростях.
Общее понятие массива данных в программировании
Предположим у нас есть несколько клиентов, которые различаются по имени. Без массива пришлось бы сделать примерно так (код на PHP):
$client1 = 'Маша'; $client2 = 'Вася'; $client3 = 'Аня';
Под массивом обычно принимается набор элементов. В большинстве языков для массивов используются квадратные скобки.
$clients = ['Маша', 'Вася', 'Аня'];
Массив предполагает использование индекса смещения. Например, так можно получить первый элемент, у которого нулевое смещение:
print($clients[0]);
Точно также можно изменить элемент, обратившись к нему по индексу.
$clients[1] = 'Петя';
То есть элементы массива представляют собой упорядоченное расположение элементов в памяти.
Есть ещё одна разновидность массивов, которая называется ассоциативным массивом. Он использует пару «ключ-значение».
$client = [ 'name' => 'Маша', 'city' => 'Киев', 'year' => '1998' ];
Чтобы получить значение массива, следует обратиться по его ключу:
print($client['city']);
С массивами, естественно, можно выполнять много разных операций, но, что касается общего описания, то в принципе этого достаточно, чтобы понимать его устройство и назначение.
Отличия Python: список и словарь
Python не использует слово «массив» и это часто вносит путаницу. Вместо этого Python разделяет понятие массива на список (list) и словарь (dict).
Список задаётся точно также, как и обычный массив и с ним можно делать все те же операции:
Clients = ['Маша', 'Вася', 'Аня'] print(Clients[0]) Clients[1] = 'Петя' print(Clients) # ['Маша', 'Петя', 'Аня']
Но список не может быть ассоциативным массивом. Ассоциативный массив в Python — это словарь:
Client = < 'name': 'Маша', 'city': 'Киев', 'year': '1998' >print(Client['city']) # Киев
Обратите внимание, что словарь задаётся уже с помощью фигурных скобок. Если попытаться использовать обычные квадратные, то Python вывалится с ошибкой. Но при этом получение данных массива, всё также происходит с помощью квадратных скобок.
Таким образом первое отличие Python — вместо слова «массив» следует использовать «список» или «словарь», чтобы показать его устройство.
Неизменяемый список — кортеж
Python выделяет особый вид списка, который будет неизменяемым — кортеж (tuple). Если в списке можно изменить любой элемент, то кортеж задаётся только один раз и больше не меняется.
t = ('Маша', 'Вася', 'Аня') t[1] = 'Петя' # TypeError: 'tuple' object does not support item assignment
Для создания кортежа используются уже круглые скобки.
Зачем нужен кортеж? Для меня — это одна из загадок, поскольку для своих задач обычного списка более чем достаточно. Но официальное объяснение — использование там, где требуется постоянное значение хэша — это т.н. неизменяемые объекты. Если мы не планируем операции по изменению элементов, то можно обойтись более простым объектом кортежа, чем список с многочисленными методами.
Если говорить строго, то для задания кортежа не нужны никакие скобки. Это типовой вариант задания кортежа.
t = 'Маша', 'Вася', 'Аня' print(t[1]) # 'Вася'
Но при этом, если мы хотим сделать кортеж с одним элементом, то нужно в конце обязательно добавлять запятую:
t = 'Маша', print(t[0]) # 'Маша'
Если запятую убрать, то мы получим, что переменная содержит обычную строку. Из-за этой особенности, желательно для всех кортежей добавлять запятую в конце перечисления значений.
t = 'Маша', 'Вася', 'Аня',
Поэтому круглые скобки используют только для того, чтобы исключить неопределённость.
Множество set
Ещё одной отличительной чертой Python является набор уникальных элементов множество (set). По своей сути — это тот же словарь, только состоящий из ключей.
st = print(st) #
Множество используется там, где нужно получить уникальные значения. Часто можно встретить задачу, где нужно убрать дубли из списка. Для этого список преобразуется в множество, потом обратно в список:
inElement = [‘planet’, ‘sputnik’, ‘planet’] inElement = list(set(inElement)) print(inElement) #
В других языках для этого используются просто функции, но в Python почему-то требуется преобразование типа «туда-сюда», при котором может измениться последовательность элементов.
Особенностью множества будет то, что в нём элементы хранятся неупорядоченно, то есть нельзя получить элемент по его индексу. Но при этом можно добавить и удалить элемент по ключу.
d1 = d1.add(‘comet’) print(d1) # d1.remove(‘planet’) print(d1) #
Есть разновидность множества — frozenset. В отличие от обычного, его нельзя изменить. Задаётся с помощью одноимённой функции:
fset = frozenset() fset.add(4) # AttributeError: 'frozenset' object has no attribute 'add'
Возникает вопрос зачем вообще нужны множества, если с ними столько нюансов? Дело в том, что Python предлагает много операций над множествами. Это очень похоже на SQL-команды UNION или даже JOIN, где происходит объединение результатов по разным алгоритмам.
# комбинации множеств a = b = # пересечение — элементы в обоих множествах print(a & b) # print(a.intersection(b)) # — или так # объединение print(a | b) # print(a.union(b)) # — или так # разность (те, что в первом, но нет во втором множестве) print(a - b) # print(a.difference(b)) # — или так # исключающие ИЛИ print(a ^ b) # print(a.symmetric_difference(b)) # — или так
Модуль array
Чтобы мы окончательно запутались, Python предлагает ещё и модуль array с помощью которого можно создавать те же списки, только определенного типа данных.
Зачем это нужно? Это некая имитация того, что есть в языках со строгой типизацией. Например в Паскале (Java и многие другие языки) следует указывать из какого типа данных будет состоять массив. Это сделано для того, чтобы можно было определить сколько памяти нужно выделить под переменную.
var a: array[1..10] of integer;
Поскольку в Python динамическая типизация, то сделать подобное можно так:
import array ar = array.array('i', [1, 2, 3, 4, 5])
Дальше работа с происходит с помощью методов модуля array.
Итого
Массивы часто используются в программах. Нужно просто запомнить, что в Python они делятся на разные варианты. В 99% случаев хватает списков и словарей.
Кортежи используются для тех случаев, когда хотят особо обратить внимание, что элементы не требуют изменения. Какого-то принципиального выигрыша (в скорости и памяти) по сравнению со списком не будет, так что это больше относится к стилю программированию.
Множества — самый «капризный» вариант — их следует использовать только там где требуется уникальность элементов. В Python нет нормальной встроенной функции для удаления дублей из списков, поэтому приходится использовать set() . Поэтому кажется, что списки постоянно используются, но нет, это скорее вынужденная мера, чтобы не изобретать свой велосипед или использовать дополнительные модули, вроде itertools.
На собеседованиях часто пытаются проверить знания этих особенностей Python. Например подсовывают код, где пытаться изменить кортеж или получить элемент множества по индексу. Это 100% уловка на внимательность. К реальному программированию это имеет мало отношения — просто достаточно знать особенности массивов Python, чтобы их полноценно использовать.
Python для начинающих: какая разница между tuple, list и set?
Язык программирования Python предоставляет четыре встроенных типа данных для хранения коллекций из объектов. Все они наделены различными свойствами и характеристиками: list (список), tuple (кортеж), set (множество) и dictionary (словарь).
В статье обсудим различия между списками, кортежами, множествами и словарями, а также поразмышляем, когда лучше использовать каждый из встроенных типов последовательностей Python.
Примечание: поскольку словарь связывает соответствующие значения с ключами, а это совсем другой сценарий использования по сравнению со списками, множествами и кортежами (которые просто содержат значения), словарь не участвует в обсуждении.
Зачем вообще выбирать?
По большей части любая из последовательностей Python применяется на практике без особых проблем, в любом приложении. Однако представьте, что перед вами поставлена легендарная задача найти иголку в стоге сена: какой тип данных Python эффективнее всего справится с такой задачей с точки зрения скорости и памяти?
Может стог сена — это список? Как насчет кортежа? Почему бы не использовать множества всегда? На какие предостережения следует обратить внимание?
Отличия между списком, кортежем и множеством
- Отличие 1: дубликаты.
Говоря проще, List и Tuple в Python как двойняшки разного пола, а тип данных Set для них как двоюродный брат. В отличие от списков или кортежей, множество не содержит дубликатов. Другими словами, элементы множества всегда уникальны. Получается, что множество удобно удаляет дубликаты, словно создано именно для этого.
set_example =
# fruit_set =
#
- Отличие 2: упорядоченность.
Наверняка вы слышали утверждение “множества и словари в Python не упорядочены”, но на сегодняшний день — это лишь половина правды в зависимости от того, какой версией Python вы пользуетесь. До Python версии 3.6 словари и множества действительно не сохраняли порядок элементов, но начиная с Python 3.7, dictionary и set официально упорядочены по времени добавления элементов. А вот list и tuple — это всегда упорядоченные последовательности объектов.
# Пример тогда ещё неупорядоченного множества в Python версии 3.5fruit_size = <>
>>> fruit_size[''] = 12
>>> fruit_size[''] = 16
>>> fruit_size[''] = 20
>>> fruit_size
- Отличие 3: индексация.
Что списки, что кортежи — оба поддерживают индексацию и срезы, а вот множества — нет.
fruit_list = ['', '', '']
fruit_list[1]
# ''animal_tuple = ('', '', '')
animal_tuple[2]
# ''vehicle_set =
vehicle_set[0]
# TypeError: 'set' object is not subscriptable
Когда выбирать список, а когда — кортеж?
Как упоминалось в руководстве ранее, кортеж — неизменяемый тип данных, тогда как список — изменяемый. Кроме того, размер кортежа фиксированный, а вот размер списка — динамический.
a_tuple = tuple(range(1000))
a_list = list(range(1000))a_tuple.__sizeof__() # 8024 байта
a_list.__sizeof__() # 9088 байт
- Список подходит, если:
- Последовательность планируется изменять.
- Планируется постепенно добавлять новые элементы в последовательность или удалять старые.
- Кортеж подходит, если:
- Последовательность НЕ планируется изменять.
- Все, что нужно от последовательности — это возможность поочередно перебирать постоянный набор элементов.
- Нужна последовательность элементов для ее назначения в качестве ключа словаря. Поскольку списки — это изменяемый тип данных, их нельзя применять в качестве ключей словаря.
- Важна скорость выполнения операций с последовательностью: из-за отсутствия возможности изменения, кортежи работают куда быстрее списков.
Когда выбирать множества?
Базовая структура типа данных “множество” — это хеш-таблица (Hash Table). Поэтому множества очень быстро справляются с проверкой элементов на вхождение, например содержится ли объект x в последовательности a_set .
Идея заключается в том, что поиск элемента в хэш-таблице — это операция O(1), то есть операция с постоянным временем выполнения.
Получается, всегда надо использовать множество?
По сути, если не нужно хранить дубликаты, то множество будет лучшим выбором, чем список.
Выводы
“Преждевременная оптимизация — корень всех зол”.
Итак, самое главное, что вам стоит запомнить по поводу списков, кортежей и множеств.
- Если необходимо хранить дубликаты, то выбирайте список или кортеж.
- Если НЕ планируется изменять последовательность после ее создания, то выбирайте кортеж, а не список.
- Если НЕ нужно хранить дубликаты, то воспользуйтесь множеством, так как они значительно быстрее определяют наличие объекта в последовательности.
В конечном итоге, по большей части не стоит слишком сильно задумываться о том, какого же типа данных последовательностью воспользоваться.
Главное — помнить о похожих чертах и особенностях встроенных типов данных Python.
- Скрейпинг PDF с нуля на Python: библиотеки tabula-py и Pandas
- Как вычислить миллионное число Фибоначчи на Python
- 3 важных рекомендации Django-программистам
Чем отличаются list, tuple и set? Зачем они нужны?
List (список), tuple (кортеж), set (множество) — это встроенные структуры данных языка python. Каждая из них имеет свои возможности и ограничения. Это позволяет выбрать наиболее подходящий способ хранения информации в программе.
List (список)
Базовая структура данных в python. Элементы в списке хранятся последовательно, каждому из них присвоены индексы, начиная с нуля. В отличие от массива, список может хранить объекты любого типа.
Создание списка
>>> my_list = [] # Создание пустого списка с помощью литерала списка >>> my_list = list() # Создание пустого списка с помощью встроенной функции >>> >>> my_list = [1,2,['a','b'],4,5] # Инициализация списка >>> >>> my_list = list('hello world') # Создание списка из итерируемого объекта >>> my_list ['h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd'] >>> >>> my_list = [x for x in range(10)] # Генератор списков в действии >>> my_list [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Доступные методы
- my_list.append(x) — добавляет x в конец списка
- my_list.clear() — очищает список
- my_list.copy() — возвращает копию списка my_list
- my_list.count(x) — возвращает кол-во элементов со значением x
- my_list.extend(x) — добавляет элементы списка x к концу списка my_list
- my_list.index(x,start,end) — возвращает индекс первого найденного x, можно задать промежуток для поиска (опционально)
- my_list.insert(index, x) — вставляет x на заданную позицию
- my_list.pop(index) — возвращает элемент с указанным индексом и удаляет его, если индекс не указан — возвращается и удаляется последний элемент
- my_list.remove(x) — удаляет первый элемент со значением x
- my_list.reverse() — инвертирует порядок элементов в списке
- my_list.sort(key=x) сортирует список на основе функции x
В каких случаях использовать?
Для хранения элементов, объединенных каким либо признаком. В случае, если изменение элементов и/или расширение списка не предполагается, следует использовать неизменяемый аналог — кортеж.
Tuple (кортёж)
Кортеж — это неизменяемый и более быстрый аналог списка. Он защищает хранимые данные от непреднамеренных изменений и может использоваться в качестве ключа в словарях (словарь — ассоциативный массив в python).
Создание кортежа.
>>> my_tuple = () # Создание кортежа с помощью литерала >>> my_tuple = tuple() # Создание кортежа с помощью встроенной функции >>> >>> my_tuple = (1,2,['a','b'],4,5) # Инициализация кортежа >>> >>> my_tuple = tuple('hello world') # Создание кортежа из итерируемого объекта >>> my_tuple ('h', 'e', 'l', 'l', 'o', ' ', 'w', 'o', 'r', 'l', 'd') >>> >>> my_tuple = tuple(2**x for x in [0, 1, 2, 3]) # Генератор кортежей >>> my_tuple (1, 2, 4, 8)
Доступные методы
- my_tuple.count(x) — возвращает кол-во элементов со значением x
- my_tuple.index(x,start,end) — возвращает индекс первого найденного x, можно задать промежуток для поиска (опционально)
В каких случаях использовать?
Для хранения данных вместо списка (если они не предполагают изменений).
Set (множество)
Множество — это набор уникальных элементов в случайном порядке (неупорядоченный список). Множества примечательны тем, что операция проверки “принадлежит ли объект множеству” происходит значительно быстрее аналогичных операций в других структурах данных.
Создание множества
>>> my_something = > # . Попытка создать множество при помощи литерала даст нам словарь >>> type(my_something) class 'dict'> >>> >>> my_set = set() # Создание при помощи встроенной функции >>> >>> my_set = 1,2,3,4,5> # Инициализация множества >>> >>> my_set = set('hello world') # Создания множества из итерируемого объекта >>> my_set 'r', 'o', 'e', 'h', 'd', 'w', 'l', ' '> >>> >>> my_set = x for x in range(10)> # Генератор множеств >>> my_set 0, 1, 2, 3, 4, 5, 6, 7, 8, 9>
Доступные методы
- my_set.add(x) — добавляет x во множество
- my_set.difference(x) — возвращает множество элементов my_set, которые не входят во множество x
- my_set.difference_update(x) — удаляет из множества my_set все элементы, которые входят во множество x
- my_set.discard(x) — удаляет элемент x из my_set
- my_set.intersection(x) — возвращает элементы общие для множеств my_set и x
- my_set.intersection_update(x) — удаляет из множества my_set элементы, которых нет во множестве x
- my_set.isdisjoint(x) — возвращает true если my_set и x не содержат одинаковых значений
- my_set.issubset(x) — возвращает true если все элементы my_set входят во множество x
- my_set.issuperset(x) — возвращает true если все элементы x входят во множество my_set
- my_set.pop() — возвращает и удаляет первый (на данный момент) элемент множества
- my_set.remove(x) — удаляет x из множества
- my_set.symmetric_difference(x) — возвращает все элементы из x и my_set, которые встречаются только в одном из множеств
- my_set.symmetric_difference_update(x) — обновляет исходное множество таким образом, что оно будет состоять из всех элементов x и my_set, которые встречаются только в одном из множеств
- my_set.union(x) — возвращает новое множество, состоящее из всех элементов x и my_set
- my_set.update(x) — добавляет в my_set все элементы x
В каких случаях использовать?
Когда необходимо проверять принадлежит ли значение набору уникальных элементов и отсутствует необходимость поддерживать порядок в данном наборе.
Попробуйте бесплатные уроки по Python
Получите крутое код-ревью от практикующих программистов с разбором ошибок и рекомендациями, на что обратить внимание — бесплатно.
Переходите на страницу учебных модулей «Девмана» и выбирайте тему.