Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
1

Поиск удвоения букв в словах которые являются элементами массива

04.06.2015, 14:47. Показов 2594. Ответов 9
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Вот возникла такая проблема. Есть три массива:
Python
1
2
3
list1 = ['orange', 'apple', 'banana']
list2 = ('carrot', 'potato','lettuce')
list3 = {'milk', 'sugar', 'butter', 'flavour'}
Ответ должен получиться таким:
Apple
Carrot
Lettuce
Butter

То есть необходимо со всех трех массивов выписать слова в которых есть удвоения букв.

Вот что у меня есть в данный момент:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import re
 
list1 = ['orange', 'apple', 'banana']
list2 = ('carrot', 'potato','lettuce')
list3 = {'milk', 'sugar', 'butter', 'flavour'}
list4 = []
 
 #соединение трех массивов в один
list4.extend(list1)
list4.extend(list2)
list4.extend(list3)
 
#поиск удвоений (не работает)
for i in list4:
    final = re.search('[a-z][A-Z]{2,2}', i).group().capitalize()
    print i.capitalize()
    print final
Вторая часть задания - посортировать элементы относительно их длинныю
Ответ должен выглядеть так:
{4: ('milk',),
5: ('apple', 'flour', 'sugar'),
6: ('orange', 'banana', 'carrot', 'potato', 'butter'),
7: ('lettuce',)}

В питоне я новичек.
Помогите пожалуйста.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2015, 14:47
Ответы с готовыми решениями:

Поиск минимума среди тех элементов массива Х, которые не являются элементами массива Y
C# Windows forms. Предпочтительно в Visual Studio 2015. Заранее благодарю. Описать функции ввода...

Найти наименьшее среди тех элементов массива a1,…,an, которые не являются элементами массива b1,…,bn
Найти наименьшее среди тех элементов массива a1,…,an, которые не являются элементами массива...

Найти наименьшее среди тех элементов массива a1,…,an, которые не являются элементами массива b1,…,bn
Добрый вечер! Пытаюсь решить эту задачу:Найти наименьшее среди тех элементов массива a1,…,an,...

Удалить из массива B те элементы, которые не являются минимальными элементами четных строк массива А.
Ввести двумерный массив A и одномерный массив B . Удалить из B те элементы, которые не являются...

Массивы. Найти наименьшее среди тех элементов массива X, которые не являются элементами массива Y
даны два целочисленных массива.найти наименьшее среди тех элементов массива X,которые не являются...

9
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
04.06.2015, 14:57 2
Цитата Сообщение от rafull6 Посмотреть сообщение
Есть три массива:
Это не массивы и эти объекты даже разных типов (список, кортеж и множество).
0
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
04.06.2015, 15:08  [ТС] 3
спасибо что поправили
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
04.06.2015, 15:22 4
Лучший ответ Сообщение было отмечено rafull6 как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
import re
 
data = [
    'orange', 'apple', 'banana', 'carrot', 'potato', 'lettuce', 'milk',
    'sugar', 'butter', 'flavour'
]
 
for i in data:
    if re.findall(r'(.)\1', i):
        print(i)
Python
1
2
3
4
5
6
data = [
    'orange', 'apple', 'banana', 'carrot', 'potato', 'lettuce', 'milk',
    'sugar', 'butter', 'flavour'
]
data.sort(key=lambda word: len(word))
print(data)
1
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 32
04.06.2015, 15:29  [ТС] 5
alex925, большое спасибо! работает отлично!
а не подскажете как в сортировке относительно длинны слова получить ответ именно в такой форме:
4: ('milk',),
5: ('apple', 'flour', 'sugar'),
6: ('orange', 'banana', 'carrot', 'potato', 'butter'),
7: ('lettuce',)

число перед выписанным словом означает кол-во букв.
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
04.06.2015, 15:57 6
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
data = [
    'orange', 'apple', 'banana', 'carrot', 'potato', 'lettuce', 'milk',
    'sugar', 'butter', 'flavour'
]
 
count = {}
for i in data:
    try:
        count[len(i)].append(i)
    except KeyError:
        count[len(i)] = [i]
 
for key, value in count.items():
    print(key, value)
1
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
04.06.2015, 20:10 7
Где-то читал что re очень медленный…
Python
8
9
for doubles in filter(lambda word: any(map(lambda i: word[i] == word[i+1], range(len(word)-1))), data):
    print(doubles)
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
04.06.2015, 20:47 8
Marinero, Твой вариант работает медленнее регулярок.

Результаты запуска функций 1000000 раз:
1. Вариант с регулярками 11.467314069974236
2. Твой вариант 16.22150262602372

К тому же твой код выглядит не особо логичным и понятным на первый взгляд, нужно немного покумекать, чтобы понять, что к чему. Это не есть хорошо, код по возможности должен быть понятным.
Ну и к тому-же он не соответствует pep, тоже не очень хорошо.

P.S мерил timeit
0
Эксперт NIX
2795 / 2038 / 682
Регистрация: 02.03.2015
Сообщений: 6,509
04.06.2015, 21:36 9
Может из-за двойного перебора? Так быстрее?
Python
8
9
10
for doubles in data:
    if any(map(lambda i: doubles[i] == doubles[i+1], range(len(doubles)-1)))):
        print(doubles)
0
2740 / 2339 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
04.06.2015, 21:58 10
Теперь считает за 13.954201333000128

Добавлено через 1 минуту
Marinero, Вообще главная мысль, которую я хотел донести, это что регулярки не самый быстрый инструмент, но и не на столько медленный, на сколько ты думаешь Не стоит на эту тему заморачиваться сильно.

Добавлено через 12 минут
Кстати, если переписать код с регулярками так:
Python
1
2
3
4
5
6
pattern = re.compile(r'(.)\1')
 
data = ['orange', 'apple', 'banana', 'carrot', 'potato', 'lettuce', 'milk', 'sugar', 'butter', 'flavour']
for i in data:
    if pattern.findall(i):            
        print(i)
То этот код выполняется вообще за 5.138230261999979
1
04.06.2015, 21:58
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.06.2015, 21:58
Помогаю со студенческими работами здесь

Найти наименьший элемент массива X среди тех, которые не являются элементами массива Y(X,Y-одномерные массивы)
Всем добрый день..помогите решить 6 задач .ничего не понимаю в этом языке поэтому где можно и нужно...

Заполнить массив элементами, которые являются разницей по модулю соседних элементов исходного массива
Напишите программу с сортировки в порядке убывания для заполнения массива В элементами, которые...

Найти наименьшее среди тех элементов матрицы Х, которые не являются элементами одномерного массива Y
Здравствуйте. Нужна помощь. Скажите, как решить этот код с помощью методов(функций) а не просто...

Найти наименьшее среди тех элементов матрицы Х, которые не являются элементами одномерного массива Y
Нужно написать функцией, при том, что матрица и массив имеют типы int** и int* соответственно. В...

Формирование массива, элементами которого являются числа, сумма цифр которых равна K и которые не больше N
Даны натуральные числа К и N. Составить программу формирования массива A, элементами которого...

Функция: найти наименьшее среди тех элементов матрицы Х, которые не являются элементами одномерного массива Y
Подскажите пожалуйста. Необходимо найти наименьшее среди тех элементов матрицы Х, которые не...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru