比较元组列表和匹配值的返回索引



我是编程的新手,并且在此练习方面遇到了一些麻烦。目标是编写一个返回匹配项列表的函数。

项目由带有字母和数字的元组定义,如果:

  1. 他们的两个字母都是元音(aeiou(,或者两者都是辅音

  1. 他们的数字总和是3
  2. 的倍数

注意:返回列表不应包括重复匹配 ->(1,2(包含与(2,1(相同的信息,输出列表应仅包含其中一个。em>

这是一个示例:

***input:*** [('a', 4), ('b', 5), ('c', 1), ('d', 3), ('e', 2), ('f',6)]
***output:*** [(0,4), (1,2), (3,5)]

任何帮助将不胜感激!

from itertools import combinations
lst = [('a', 4), ('b', 5), ('c', 1), ('d', 3), ('e', 2), ('f',6)]
vowels = 'aeiou'
matched = [(i[0],j[0]) for (i,j) in combinations(enumerate(lst),2) if (i[1][0] in vowels) == (j[1][0] in vowels) and ((i[1][1] + j[1][1]) % 3 == 0)]
print(matched)

对不起,我很高的代表可以发表评论,但是一旦可以进行编辑/更新。

我对这个问题有些困惑,字母的目的是什么,我们应该在字母中使用它们的声音作为其价值吗?即A = 0,b = 1?

我们将一个元组与

进行比较

谢谢

您可以将itertools.combinationsenumerate一起使用所有组合和输出索引。组合不包括排列,因此您不会看到重复。

from itertools import combinations
lst = [('a', 4), ('b', 5), ('c', 1), ('d', 3), ('e', 2), ('f',6)]
def checker(lst):
    vowels = set('aeiou')
    for (idx_i, i), (idx_j, j) in combinations(enumerate(lst), 2):
        if ((i[0] in vowels) == (j[0] in vowels)) and ((i[1] + j[1]) % 3 == 0):
            yield idx_i, idx_j
res = list(checker(lst))
# [(0, 4), (1, 2), (3, 5)]

最新更新