Задача на сортировку списка вручную
Надо преобразовать исходный список в список, в котором сначала идут все слова, содержащие только буквы, а потом – слова, в которых есть буквы и цифры. Относительный порядок слов сохраняется.
Пробую уже по всякому. Извините, если в коде полный бред. Я только начинаю учиться ( помогите пожалуйста решить!
Код 1:
a=str(input()).split()
b='0 1 2 3 4 5 6 7 8 9'.split()
c=[]
j=0
for i in range(len(b)):
if b[i] in a[j]:
c.append(a)
break
j+=1
print(c)
Код 2:
a=str(input()).split()
b='0 1 2 3 4 5 6 7 8 9'.split()
c=[]
j=0
for i in range(len(b)):
if b[i] in a[j]:
c.append(a[j])
j+=1
else:
print(c)
Ответы (2 шт):
Итак, как я понял у нас даётся список вида
["abse", "a4bgs", "124gf", "ada", "ofag14", "12516"]
Мы должны сдвинуть все слова, содержащие только буквы влево. Первым делом разберём ваши ошибки:
'1 2 3 4 5 6 7 8 9 0'.split()
не имеет смысла, так как строка уже является массивом (почти), следовательно данное выражение эквивалентно выражению
'1234567890'
Далее: Строка
str(input())
так же не имеет смысла, ведь input() и так возвращает объект с типом str
Да и вообще я не очень понимаю ваш алгоритм, так что предлагаю свой:
Инициализируем некоторые переменные
# список слов на вход
input_list = ["abse", "a4bgs", "124gf", "ada", "ofag14", "12516"]
# Символы цифр
numbers = '1234567890'
# Массивы, в котором будут хранится слова только
# Из букв
letters_only = []
# Из букв и цифр
letters_numbers = []
Теперь проходимся по каждому слову в оригинальном массиве и, если слово содержит цифры, то добавляем его в список letters_numbers, иначе в letters_only:
def contains_number(word): # Содержит ли слово цифру
for letter in word: # Для каждого символа
if letter in numbers: # если символ находится в списке чисел
return True
return False
for word in input_list: # Для каждого слова из массива
if contains_number(word): # Если содержит число
letters_numbers.append(word) # Добавляем в список слов с числами
else: # Иначе
letters_only.append(word) # добавляем в список слов без чисел
Таким образом у нас получается 2 массива, где в letters_only хранятся только слова с буквами, а в letters_numbers слова с буквами и числами, при этом в обоих списках такой же порядок, что и в оригинальном. Теперь мы можем просто объединить 2 этих списка:
print([*letters_only, *letters_numbers])
# ['abse', 'ada', 'a4bgs', '124gf', 'ofag14', '12516']
Фильтруем исходный список дважды - сначала оставляем только буквы .isalpha, потом НЕ только буквы not .isalpha(), две части склеиваем.
lst = ['aaa','12345','x2345','bbb','1a2b3c','ccc','ddd10']
lst = list(filter(str.isalpha, lst)) + list(filter(lambda x: not x.isalpha(), lst))
print(lst)
['aaa', 'bbb', 'ccc', '12345', 'x2345', '1a2b3c', 'ddd10']
Если допустимо использование встроенных функций сортировки, то так:
lst = sorted(lst, key=str.isalpha, reverse=True)
При равных ключах сортировки порядок следования элементов сохраняется
Сортировки гарантированно будут стабильными. Это означает, что если несколько записей имеют один и тот же ключ, их первоначальный порядок сохраняется.
Для всех чисто буквенных строк ключ сортировки == True, для остальных он == False.