int(x) if x.isdigit() else x
- это тернарный оператор («если условие, то это еще то»), который, как вы правы, не является частью понимания списка. Здесь говорится «превратить x
(из понимания списка) в целое число, если оно содержит только цифры».
Итак, мы могли бы записать все это так:
def convert_integer(x):
if x.isdigit():
return int(x)
else:
return x
def key_function(var):
return [convert_integer(x)
for x in re.findall(r'[^0-9]|[0-9]+', var)]
all_frames.sort(key = key_function)