Python

Можете объяснить поведение кода, почему в итоге располжение элементов поменялось?

 fruits = [ "lemon", "pear", "watermelon", "tomato" ] 
print(( *fruits[1:], fruits[0] )) # ('pear', 'watermelon', 'tomato', 'lemon')

uppercase_fruits = ( f.upper() for f in fruits )
print({ *fruits, *uppercase_fruits }) # {'TOMATO', 'PEAR', 'tomato', 'pear', 'WATERMELON', 'LEMON', 'watermelon', 'lemon'}

Я ожидала, что будет:
 {'pear', 'watermelon', 'tomato', 'lemon', 'LEMON', 'PEAR', 'WATERMELON', 'TOMATO'} 
В первом случае, мы создаем новый кортеж с помощью распаковки элементов списка fruits. Кортеж содержит все элементы списка, кроме первого, за которым следует первый элемент. Таким образом, мы получаем кортеж ('pear', 'watermelon', 'tomato', 'lemon').

Во втором случае, мы создаем новое множество, используя оператор {} и распаковываем элементы списка fruits и элементы, возвращаемые генераторным выражением uppercase_fruits. Таким образом, мы получаем множество, содержащее все элементы из списка fruits, но элементы в верхнем регистре также добавлены в множество. Порядок элементов в множестве не гарантируется, поэтому результат может отличаться от ожидаемого порядка. В вашем случае, элементы, возвращаемые генераторным выражением, добавляются в множество после элементов из списка fruits, что приводит к изменению порядка элементов в итоговом множестве.
Владимир Мурко
Владимир Мурко
350
Лучший ответ
Множества не упорядочены. У них "случайное" расположение элементов
Dima Kovalenko
Dima Kovalenko
34 940
Чтобы получить то, что ожидается, надо вместо множества (фигурные скобки {}) использовать либо массив (квадратные скобки []), либо кортеж (круглые скобки ()).

Кроме того, использование *fruits даст "lemon", "pear", "watermelon", "tomato". Чтобы получить ожидаемое, надо использовать *fruits[1:], fruits[0]:
 print(( *fruits[1:], fruits[0], *uppercase_fruits )) 
Костя Жигулин
Костя Жигулин
12 091
А что такое звёздочка внутри принта?
И кстати фигурные скобки у вас обозначают set, то есть множество. А у множества Нет такого понятия как сортировка ему главное чтобы каждый элемент был уникальный и единственный все дубли выкидываются. Так что порядок у множества будет любой непредсказуемый. По сути у него порядка нет вообще, вы не можете сказать хочу сет первое или сет второе получить, он вас не поймёт.
Валерий. Яковлев. Звёздочка - распаковка.