2013-08-10 4 views
1

Вопрос: Каков наилучший подход к решению этой проблемы?Поиск общих символов

Например, если два значения «шоколад» и «тараканы», то функция должна возвращать «Choa»

ИССЛЕДОВАНИЕ:

Я нашел находку(), или сделать его в список ведьма помогает структурировать функцию.

КОД: Здесь у меня проблемы!

Value1 = input("Please input a word: ") 
Value2 = input("Please input a second word: ") 
[How do I find similar letters in two words] 
print(similar_letters) 

Пример:

 
Please input a word: hello 
Please input a second word: hey 
letters in word are : 'he' 
+1

Не могли бы вы подробно объяснить, как именно работает ваш пример? – arshajii

+0

@Christian Careaga Я исправил его – Kelsey

+0

@arshajii Я добавил дополнительную информацию – Kelsey

ответ

4

Возможно, вы имели в виду обычные символы? использовать наборы, до тех пор, пока вы не возражаете, что они удалить дубликаты и изменять порядок элементов:

s1 = set("chocolate") 
s2 = set("cockroach") 

"".join(s1 & s2) 
=> "ahco" 
+1

Хорошо, я плохо объяснил сам. Я прояснил ситуацию. Это то, к чему я стремился. – Kelsey

+0

, если вам нужен порядок вывода, вы можете отсортировать его после операции объединения, например '. '.join (отсортировано ((s1 & s2), key = lambda x:' chocolate'.index (x))) ' – roippi

+0

Downvoters: _this_ - это то, что OP хотел, позаботиться о пересмотре ваших downvotes? –

3

Неправильного оригинального ответа (слева на месте ради комментариев,). Результат ошибочен во многих случаях, особенно когда образцы Value1 и Value2 переставляются.

output= [ x for x in list(Value1) if x in list(Value2) ] 

Правильный ответ (ИМХО), если желаемый результат будет представлять в выходных символов, которые появляются как в Value1 и более Value2, чем один раз.

''.join([ x * min(Value1.count(x),Value2.count(x)) for x in sorted(set(Value1) | set(Value2)) ]) 

Для образца Value1='chocolate' и Value2= 'cockroach', выход 'acchoo' (любая игра слов здесь? :-)). sorted имеет в качестве функции только то, что символы появляются в алфавитном порядке (и, таким образом, делают стабильной точную результирующую строку).

+0

Почему -1? Это не совсем то, что вы искали, но затем вы даете «choca» в качестве желаемого ответа, дублируя «c». –

+0

Это отлично работает. Это просто и объясняет это красиво, но @Mario Rossi прав, я не хотел дублировать письма. – Kelsey

+2

@MarioRossi это возвращает 'chocoa', а не' choca'. Также мне не нравится ненужный вызов 'list()', строки уже итерабельны. (Я не сторонник, но я понимаю его голос) – roippi

Смежные вопросы