【问题标题】:Compare List of Tuples and Return Indices of Matched Values比较元组列表和匹配值的返回索引
【发布时间】:2018-04-03 19:34:31
【问题描述】:

我是编程新手,在这个练习中遇到了一些问题。目标是编写一个返回匹配项列表的函数。

项目由一个包含字母和数字的元组定义,如果满足以下条件,我们认为项目 1 与项目 2 匹配:

  1. 它们的字母都是元音 (aeiou),或者都是辅音

  1. 它们的数字之和是 3 的倍数

注意:返回列表不应包含重复匹配项 --> (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)]

任何帮助将不胜感激!

【问题讨论】:

  • 到目前为止你尝试了哪些方法,你在哪里卡住了?

标签: python tuples


【解决方案1】:
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)

【讨论】:

    【解决方案2】:

    抱歉,我有足够的代表发表评论,但我会尽快编辑/更新。

    我对这个问题有点困惑,字母的用途是什么,我们应该使用它们在字母表中的位置作为它们的值吗?即 a=0, b=1?

    我们将一个元组与什么进行比较?

    谢谢

    【讨论】:

      【解决方案3】:

      您可以使用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)]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-05-09
        • 1970-01-01
        • 2016-12-23
        • 1970-01-01
        • 2017-04-04
        • 1970-01-01
        • 1970-01-01
        • 2020-01-02
        相关资源
        最近更新 更多