【问题标题】:Checking if two elements match in a nested list (python)检查嵌套列表中的两个元素是否匹配(python)
【发布时间】:2022-01-24 16:52:25
【问题描述】:

我有一个格式列表:

my_list= [['ezis', 0], ['camera', 15], ['size', 0], ['esu', 16], ['take', 4],
 ['pictur', 26], ['tnaw', 46], ['thing', 49], ['ilno', 8],.....]

我想看看末尾的数字是否与字符串的倒数匹配(例如,在此列表中,['ezis', 0]['size', 0] 将相互匹配,因为它们的最终值都是 0 并且'size' 反转为 'ezis'。然后我想记录这些匹配的数量。

到目前为止,我有:

matches = 0

for x,y in my_list:
    if (x[0]==y[0][::-1]) and x[1]==y[1]:
        matches+=1    #a match is found

但是我遇到了一个错误,不知道还有什么方法可以解决这个问题

有人可以帮忙吗?

【问题讨论】:

  • sizeezis 应该算作 2 还是 1?
  • 你得到的错误是什么?为什么您希望该代码能够工作? for x, y in my_list 在第一次迭代中设置 x = 'ezis'y = 0。您的代码不会将子列表中的字符串相互比较。它所做的只是比较x 的第一个字符与y 的“第一个元素”(这是不可能的,因为y 是一个整数),以及x 的第二个字符与第二个元素y(同样,y 是一个整数,所以这是不可能的)

标签: python list for-loop nested-lists


【解决方案1】:

试试:

>>> sum(1 for k, v in dict(my_list).items() if v==dict(my_list).get(k[::-1]))
2

【讨论】:

    【解决方案2】:

    如果要将sizeezis算为1,可以这样做:

    d = {}
    for x,y in my_list:
        d.setdefault(y, set()).add(x)
        
    matches = 0
    for k,v in d.items():
        x = v.pop()
        if x[::-1] in v:
            matches += 1
    

    【讨论】:

      【解决方案3】:

      您可以使用计数器类(来自集合)来获取字典中的所有计数。

      如果您希望每个“重复”仅出现一次,并且两个字符串顺序的计数:

      my_list= [['ezis', 0], ['camera', 15], ['size', 0], ['esu', 16], ['take', 4],
                ['pictur', 26], ['tnaw', 46], ['thing', 49], ['ilno', 8]]
      
      from collections import Counter
      
      counts = Counter((max(s,s[::-1]),n) for s,n in my_list)
      
      print(counts)
      Counter({('size', 0): 2, ('camera', 15): 1, ('use', 16): 1, ('take', 4): 1, 
               ('rutcip', 26): 1, ('want', 46): 1, ('thing', 49): 1, 
               ('onli', 8): 1})
      

      如果您只想要匹配对的计数:

      counts    = Counter(map(tuple,my_list))
      revCounts = { (s,n):counts[s[::-1],n] for s,n in counts if counts[s[::-1],n]}
      
      print(revCounts)
      {('ezis', 0): 1, ('size', 0): 1}
      

      【讨论】:

        猜你喜欢
        • 2013-03-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-11-19
        • 1970-01-01
        相关资源
        最近更新 更多