использовать следующий непустой элемент в следующем списке вложенных списков - PullRequest
1 голос
/ 04 апреля 2019

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

Пример: Ввод: hello Выход: ["Hello", "hEllo", "heLlo", "helLo", "hellO"]

Функция:

def cap_wave(str):
    str_split = len([x for x in list(str) if x.isalpha()])
    len_list = [list(str) for i in range(1, str_split+1)]
    result = []
    for i in range(len(len_list)):
        temp = []
        for t in len_list[i]:
            char_modified = t
            if not char_modified:
                continue
            else:
                temp.append(char_modified)
        result.append(temp)
        new_nested = [[a.upper() if i == 0 else a for i, a in enumerate(b)] for b in result]
        nest_joins = [''.join(x) for x in new_nested]
    return nest_joins

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

Ответы [ 2 ]

2 голосов
/ 04 апреля 2019

Вы можете использовать enumerate () и upper () , чтобы получить желаемый эффект, если вы перебираете буквы своего слова:

text = "hello"   # this will _not_ lowercase first - do that before if you want it

k = []
for i,c in enumerate(text):
    k.append(text[:i]+ text[i].upper() + text[i+1:])

print(k) 

Выход:

['Hello', 'hEllo', 'heLlo', 'helLo', 'hellO']

enumerate () дает вам текущую позицию внутри слова, и вы разбираете список, чтобы получить правильный символ в верхнем регистре.

Похожие:

1 голос
/ 04 апреля 2019
s1 = "hello"

words = []
for i in range(len(s1)):
    words.append(s1[:i] + s1[i:i+1].capitalize() + s1[i+1:])

print(words)

даст

['Hello', 'hEllo', 'heLlo', 'helLo', 'hellO']
...