Здесь я всегда задавался вопросом. Я поставил вопрос для Python, но я бы также приветствовал ответы, которые касаются стандартных библиотек в Java и С++.
Скажем, у вас есть список Python с именем "my_list", и вы хотите перебрать его уникальные элементы. Существует два естественных подхода:
#iterate over set
for x in set(my_list):
do_something(x)
или
#list to set to list
for x in list(set(my_list)):
do_something(x)
Напряжение заключается в том, что итерирование по списку быстрее, чем повторение по набору, но для преобразования набора в список требуется время. Я предполагаю, что ответ на этот вопрос будет зависеть от ряда факторов, таких как:
- Сколько раз нам нужно итерации?
- Насколько велик исходный список?
- Сколько повторений в исходном списке мы должны ожидать?
Итак, я предполагаю, что я ищу эмпирическое правило формы "Если в списке есть x много элементов, каждый элемент повторяется не более y раз, и вам нужно только повторить z раз, тогда вы должны перебирать множество, иначе вы должны преобразовать его в список."