假设我有一个像这样的元组列表:
list_of_tuples = [('A', 'R'), ('B', 'R'), ('C', 'G'), ('D', 'G'), ('E', 'B'), ('D', 'B'), ('R', 'B'), ('F', 'R'), ('V', 'R'), ('A', 'G')]
每个元组中的第二个值始终是R、B或G。我想创建一个函数validate,检查是否可以使用每个元组第一个位置的字母构造某个单词,但前提是该元组的节位置中的字母不重复。
例如,可以构造单词:
ACEwith (A, R), (C, G)and(E, B)因为每个元组中的第二个值对应于RGBwhich 不连续重复任何字母。
ACEDwith(A, R), (C, G), (E, B), and ('D', 'B')是不可能的,因为这对应RGBB于其中有一个连续的 B。
请注意,有时同一个字母的第二个位置可能有不同的字母,例如:
('A', 'R') and ('A', 'G'). ACE如果您选择了第一个元组,而不是第二个,您只能拼写,否则G's 会重复。
另请注意,GBRBG即使第二个位置字母“重复”它们不会连续重复,也可能出现类似的组合。
所以我想要一个可以通过以下方式验证单词的函数:
def validate(submitted_word, list_of_tuples)
一种可能性是构造该集合可能的序列的每个可能组合以及将由第二个序列中的字母产生的相应序列,过滤掉那些是有效单词的,然后过滤掉那些具有连续重复字母,但我担心考虑到元组列表可以变得有多大,这将是低效的。