我在下面的字典中创建的密钥是值的长度。
typeof(PhotoFilterHandler).BaseType.Name
我想在这个词典中提取一个值列表,使得元音在5个单词的同一个地方出现 [丢失,欲望,列表,最后,以免],[遮挡,搅拌机,的Blonder,大错,乏味]]
我对如何以这种方式获取列表一无所知。我认为可以通过正则表达式的一种方式,但我在什么基础上匹配?单词的长度可以是任何东西,元音可以是任何地方。
PS这是一个代码问题。 https://www.codewars.com/kata/vowel-alternations/train/python 到目前为止,我的方法是在字典中获取相同长度的值,以便我可以处理值。我根本不知道如何处理这些价值观。 如果有人能够解释我们在想什么以及最好的方法是什么,那将会很有帮助。
代码的其余部分
{4: {'lost', 'lust', 'list', 'last', 'lest', 'blue'}, 5: {'beryl'}, 8: {'blowlamp', 'blimbing', 'bluejays', 'jigsawed'}, 9: {'blistered', 'oospheres', 'blackcaps', 'blastular', 'blotchier', 'troweller'}, 10: {'blancmange', 'blackguard', 'volcanizes'}, 6: {'blague', 'blacks', 'blonde', 'blocks'}, 7: {'blawort', 'blinder', 'blender', 'blonder', 'blunder', 'blander'}}
答案 0 :(得分:0)
您可以检查元音位置的第一个字符串,并生成要匹配的正则表达式字符串。每个字母映射到'[aeiou]'或'。'取决于它是否是元音。你为什么选择'y'取决于你。
答案 1 :(得分:0)
假设您只想在输出列表包含5个单词时打印出来:
text = {4: {'lost', 'lust', 'list', 'last', 'lest', 'blue'}, 5: {'beryl'}, 8: {'blowlamp', 'blimbing', 'bluejays', 'jigsawed'}, 9: {'blistered', 'oospheres', 'blackcaps', 'blastular', 'blotchier', 'troweller'}, 10: {'blancmange', 'blackguard', 'volcanizes'}, 6: {'blague', 'blacks', 'blonde', 'blocks'}, 7: {'blawort', 'blinder', 'blender', 'blonder', 'blunder', 'blander'}}
vowels = "aeiou"
for i in range(4,10):
words = text[i]
rep_idx = []
for word in words:
for letter in vowels:
if letter in word:
idx = word.index(letter)
if idx not in rep_idx:
word_list = []
for word in words:
if word[idx] in vowels:
word_list.append(word)
if len(word_list) == 5:
print ("{}, Vowel Index: {}".format(word_list, idx))
rep_idx.append(idx)
输出:
>>>
['lust', 'lest', 'list', 'lost', 'last'], Vowel Index: 1
['blonder', 'blender', 'blinder', 'blander', 'blunder'], Vowel Index: 5
['blistered', 'blackcaps', 'troweller', 'blastular', 'blotchier'], Vowel Index: 2
['blistered', 'troweller', 'oospheres', 'blastular', 'blotchier'], Vowel Index: 7
答案 2 :(得分:0)
以下代码是接近它的一种方式的开始:
#!/usr/bin/python
import re
words = 'last lest best list '.split()
words1 = 'blander wigwam blunder slender'.split()
print("word list one: {}".format(words))
print('')
aoa = [re.split('[aeiou]', word) for word in words]
for item in aoa:
print(item)
print('\n')
print("word list two: {}".format(words1))
print('')
aoa1 = [re.split('[aeiou]', word) for word in words1]
for item in aoa1:
print(item)
输出是:
word list one: ['last', 'lest', 'best', 'list']
['l', 'st']
['l', 'st']
['b', 'st']
['l', 'st']
word list two: ['blander', 'wigwam', 'blunder', 'slender']
['bl', 'nd', 'r']
['w', 'gw', 'm']
['bl', 'nd', 'r']
['sl', 'nd', 'r']
正则表达式在元音上分裂。如果仔细查看拆分的输出,您会注意到对于应匹配的单词,相应的列表索引值是相同的。也许您可以遍历列表并进行比较。
这取决于你...
答案 3 :(得分:0)
好的,对于代码问题问题(我采取了与你不同的方法,所以我没有使用你的代码):
首先,您定义一个简单的函数,更改某些(这里是一个美元符号)字符的所有元音:
from collections import Counter
def translate(word):
for ch in 'eyuioa':
if ch in word:
word=word.replace(ch,'$')
return word
然后你定义一个函数,它将单词列表作为输入(例如['last','lest','list','lost','lust']))来计算每个翻译单词的出现次数,并找到发生5次的翻译单词。将其存储在列表中并添加[无],以防列表为空(找不到单词),这样就不会出现错误。然后只需打印符合条件的所有单词。
def find_solutions(input_list):
tuples_list = list(map(lambda x: (x,translate(x)),input_list))
counting = Counter(map(lambda x: x[1], tuples_list))
desired_pattern = [x for x,y in dict(counting).items() if y ==5] + [None]
return [x for x, y in tuples_list if y==desired_pattern[0]]
示例:
find_solutions(['last', 'lest', 'list', 'lost', 'lust'])
答案 4 :(得分:0)
这将是非常强大的方法,但似乎有效:
puts "=" * 80
puts %x("ls")
puts "=" * 80
if $?.success?
puts "Success!"
else
puts "Error happened. Status: #{$?}"
end