В Python, когда использовать словарь, список или набор?

Я не могу придумать ни одного регулярного выражения для этого. Итак, что вы можете сделать, это заменить все различные типы разделителей на определенный пользователем разделитель, скажем, $ DELIMITER $ , а затем разбить предложение на основе этого разделителя.

new_sent = re.sub('[.,;]', '$DELIMITER 

Это приведет к следующему:

['I want to be splitted using different patterns',
 ' It is a complex task',
 ' and not easy to solve',
 ' so',
 ' I would need help',
 '']

ПРИМЕЧАНИЕ: Приведенный выше вывод имеет дополнительную пустую строку. Это потому, что в конце предложения есть точка. Чтобы избежать этого, вы можете либо удалить этот пустой элемент из списка, либо заменить пользовательский разделитель , если он встречается в конце предложения .

new_sent = re.sub('[.,;]', '$DELIMITER 

Если у вас есть список разделителей, вы можете создать шаблон регулярного выражения, используя следующий код:

delimiter_list = [',', '.', ':', ';']
pattern = '[' + ''.join(delimiter_list) + ']' #will result in [,.:;]
new_sent = re.sub(pattern, '$DELIMITER 

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Надеюсь, это поможет !!!

)

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Если у вас есть список разделителей, вы можете создать шаблон регулярного выражения, используя следующий код:

delimiter_list = [',', '.', ':', ';']
pattern = '[' + ''.join(delimiter_list) + ']' #will result in [,.:;]
new_sent = re.sub(pattern, '$DELIMITER 

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Надеюсь, это поможет !!!

)

Надеюсь, это поможет !!!

)

Если у вас есть список разделителей, вы можете создать шаблон регулярного выражения, используя следующий код:

delimiter_list = [',', '.', ':', ';']
pattern = '[' + ''.join(delimiter_list) + ']' #will result in [,.:;]
new_sent = re.sub(pattern, '$DELIMITER 

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Надеюсь, это поможет !!!

)

Надеюсь, это поможет !!!

, sent) new_sent.split('$DELIMITER

Это приведет к следующему:

['I want to be splitted using different patterns',
 ' It is a complex task',
 ' and not easy to solve',
 ' so',
 ' I would need help',
 '']

ПРИМЕЧАНИЕ: Приведенный выше вывод имеет дополнительную пустую строку. Это потому, что в конце предложения есть точка. Чтобы избежать этого, вы можете либо удалить этот пустой элемент из списка, либо заменить пользовательский разделитель , если он встречается в конце предложения .

new_sent = re.sub('[.,;]', '$DELIMITER 

Если у вас есть список разделителей, вы можете создать шаблон регулярного выражения, используя следующий код:

delimiter_list = [',', '.', ':', ';']
pattern = '[' + ''.join(delimiter_list) + ']' #will result in [,.:;]
new_sent = re.sub(pattern, '$DELIMITER 

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Надеюсь, это поможет !!!

)

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Если у вас есть список разделителей, вы можете создать шаблон регулярного выражения, используя следующий код:

delimiter_list = [',', '.', ':', ';']
pattern = '[' + ''.join(delimiter_list) + ']' #will result in [,.:;]
new_sent = re.sub(pattern, '$DELIMITER 

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Надеюсь, это поможет !!!

)

Надеюсь, это поможет !!!

)

Если у вас есть список разделителей, вы можете создать шаблон регулярного выражения, используя следующий код:

delimiter_list = [',', '.', ':', ';']
pattern = '[' + ''.join(delimiter_list) + ']' #will result in [,.:;]
new_sent = re.sub(pattern, '$DELIMITER 

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Надеюсь, это поможет !!!

)

Надеюсь, это поможет !!!

)

Это приведет к следующему:

['I want to be splitted using different patterns',
 ' It is a complex task',
 ' and not easy to solve',
 ' so',
 ' I would need help',
 '']

ПРИМЕЧАНИЕ: Приведенный выше вывод имеет дополнительную пустую строку. Это потому, что в конце предложения есть точка. Чтобы избежать этого, вы можете либо удалить этот пустой элемент из списка, либо заменить пользовательский разделитель , если он встречается в конце предложения .

new_sent = re.sub('[.,;]', '$DELIMITER 

Если у вас есть список разделителей, вы можете создать шаблон регулярного выражения, используя следующий код:

delimiter_list = [',', '.', ':', ';']
pattern = '[' + ''.join(delimiter_list) + ']' #will result in [,.:;]
new_sent = re.sub(pattern, '$DELIMITER 

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Надеюсь, это поможет !!!

)

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Если у вас есть список разделителей, вы можете создать шаблон регулярного выражения, используя следующий код:

delimiter_list = [',', '.', ':', ';']
pattern = '[' + ''.join(delimiter_list) + ']' #will result in [,.:;]
new_sent = re.sub(pattern, '$DELIMITER 

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Надеюсь, это поможет !!!

)

Надеюсь, это поможет !!!

)

Если у вас есть список разделителей, вы можете создать шаблон регулярного выражения, используя следующий код:

delimiter_list = [',', '.', ':', ';']
pattern = '[' + ''.join(delimiter_list) + ']' #will result in [,.:;]
new_sent = re.sub(pattern, '$DELIMITER 

Надеюсь, это поможет !!!

, sent) new_sent = re.sub('\$DELIMITER\$', '', new_sent) new_sent.split('$DELIMITER

Надеюсь, это поможет !!!

)

Надеюсь, это поможет !!!

280
задан dreftymac 1 July 2019 в 13:44
поделиться

5 ответов

Список поддерживает порядок, dict и set не нужно: когда вам важен порядок, вы должны использовать list ] (если, конечно, ваш выбор контейнеров ограничен этими тремя ;-).

dict связывает с каждым ключом значение, в то время как list и set просто содержат значения: очевидно, очень разные варианты использования.

set требует, чтобы элементы были хешируемыми, list - нет: если у вас есть нехешируемые элементы, вы не можете использовать set и должны вместо этого использовать список .

набор запрещает дублирование, список не запрещает: также важное различие. («Мультимножество», которое отображает дубликаты в другое количество элементов, присутствующих более одного раза, можно найти в коллекциях. Счетчик - вы можете создать его как dict , если по какой-то странной причине вы не могли импортировать коллекций или, в Python до версии 2.7 как collections.defaultdict (int) , используя элементы в качестве ключей и связанное значение в качестве считать).

Проверка принадлежности значения к набору (или dict , для ключей) невероятно быстро (занимает примерно постоянное короткое время), тогда как в списке требуется время, пропорциональное длине списка в среднем и худшем случаях. Итак, если у вас есть хэшируемые элементы, вам не важен порядок или дубликаты, и вам нужна быстрая проверка членства, set лучше, чем list .

588
ответ дан 23 November 2019 в 01:59
поделиться

Короче говоря, используйте:

list - если вам требуется упорядоченная последовательность предметов.

dict - если вам требуется связать значения с ключами

set - если вам требуется сохранить уникальные элементы.

Подробное объяснение

Список

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

Список реализует все общие операции последовательности:

  • x in l и x not in l
  • l[i], l[i:j], l[i:j:k]
  • len(l), min(l), max(l)
  • l.count(x)
  • l.index(x[, i[, j]]) - индекс первого вхождения x в l (во время или после i и до j индексирует)

В списке также реализованы все операции изменяемой последовательности:

  • l[i] = x - элемент i из l заменяется на x
  • l[i:j] = t - срез l из i в j заменяется содержимым повторяемого t
  • del l[i:j] - l[i:j] = []
  • l[i:j:k] = t - элементы l[i:j:k] заменяются элементами t
  • del l[i:j:k] - удаляет элементы из s[i:j:k] из списка
  • l.append(x) - добавляет x в конец последовательности
  • l.clear() - удаляет все элементы из l (так же, как del l[:])
  • l.copy() - создает мелкую копию l (аналогично l[:])
  • l.extend(t) или l += t - расширяет l на t Содержимое t
  • l *= n - обновления l с его повторением n раз
  • l.insert(i, x) - вставка x в l по указанному индексу по i
  • l.pop([i]) - получает элемент в i, а также удаляет его из l
  • l.remove(x) - удаляет первый элемент из l, где l[i] равно x
  • l.reverse() - переворачивает элементы l на месте

Список можно использовать в качестве стека, используя преимущества методов append и [тысяча сто шестьдесят один].

Словарь

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

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

Набор

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

1
ответ дан 23 November 2019 в 01:59
поделиться
  • Вам просто нужна упорядоченная последовательность элементов? Составьте список.
  • Вам просто нужно знать, получили ли вы уже определенное значение, но без упорядочивания (и вам не нужно хранить дубликаты)? Используйте набор.
  • Нужно ли вам связывать значения с ключами, чтобы впоследствии можно было эффективно их искать (по ключам)? Используй словарь.
163
ответ дан 23 November 2019 в 01:59
поделиться
  • Используйте словарь, когда у вас есть набор уникальных ключей, которые соответствуют значениям.

  • Используйте список, если у вас есть упорядоченный набор элементов.

  • Используйте набор для хранения неупорядоченного набора элементов.

18
ответ дан 23 November 2019 в 01:59
поделиться

Если вам нужен неупорядоченный набор уникальных элементов, используйте набор . (Например, если вам нужен набор всех слов, используемых в документе).

Если вы хотите собрать неизменяемый упорядоченный список элементов, используйте кортеж . (Например, если вам нужна пара (name, phone_number), которую вы хотите использовать в качестве элемента в наборе, вам понадобится кортеж, а не список, поскольку наборы требуют, чтобы элементы были неизменными).

Если вы хотите собрать изменяемый упорядоченный список элементов, используйте список . (Например, если вы хотите добавить новые номера телефонов в список: [номер1, номер2, ...]).

Если вы хотите сопоставить ключи со значениями, используйте dict . (Например, если вам нужна телефонная книга, в которой имена сопоставляются с номерами телефонов: {'John Smith': '555-1212'} ). Обратите внимание, что клавиши в слове не упорядочены. (Если вы выполняете итерацию по словарю (телефонной книге), ключи (имена) могут отображаться в любом порядке).

19
ответ дан 23 November 2019 в 01:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: