【问题标题】:how would I iterate through these sets and display all the common numbers within them?我将如何遍历这些集合并显示其中的所有常见数字?
【发布时间】:2019-11-22 15:30:43
【问题描述】:
spring =  {'April': {11,10,9,10,15,15,9,7,7,8,9,8,4,2,-1,-3,4,4,2,8,14,8,4,2,2,4,4,5,10,11,14}, 'May': {15,14,20,22,22,25,15,19,19,22,20,19,10,11,15,9,8,6,20,22,22,20,19,20,19,20,20,20,19,19,17}

summer = {'July':{26,27,24,25,25,27,28,26,28,23,20,22,34,25,8,9,17,22,23,25,20,26,23,14,24,27,28,23,25,23,20}, 'August':{8,9,15,25,20,21,24,18,22,25,25,24,26,37,20,20,23,23,27,19,17,22,26,29,24,22,24,28,24,25,23,23}

temp_data = {'spring': spring, 'summer': summer}

所以我在这里需要做的几乎就是通过字典并在几个月内访问集合(我已经完成了),我不知道该怎么做是在每个月内检查交点的季节……

    for d,v in temp_data.items():
        print(d)
        #new = []
        for value in v:
            temps = v[value]
            combine = v[value].intersection(value)
            print(f'{value}: {temps}')
        print(combine) 

我期待输出:

spring: [number , number, number, number]

summer: [number, number, number] 

所以它应该返回该特定季节月份之间所有相似数字的列表...

请不要只给出没有解释的答案我是python的初学者并正在努力学习:),谢谢

【问题讨论】:

  • spring: [number , number, number, number]: print(f"spring: [{', '.join('number' for _ in range(4))}]"),这很容易。现在你为什么不告诉我们你实际期望的输出而不是含糊其辞..

标签: python-3.x list for-loop nested set


【解决方案1】:

好的,所以,你还没有告诉我你的问题是什么,所以我假设你遇到了语法错误(第 1 行)。这是由于括号不平衡 - 您在行尾缺少括号 (})。第二行(定义“夏天”的地方)也是如此。添加这些括号后我运行程序,它似乎运行良好。

我刚刚再次查看了输出以及您的预期并弄清楚了您的问题所在。当您执行v[value].intersection(value) 时,这只是得到“月份”集和月份名称的交集——这将是一个空白集。相反,我会这样做:

for d, v in temp_data.items():
    print(d)
    for value in v:
        temps = v[value]
        print(f'{value}: {temps}')
    combine = set.intersection(*v.values())
    print(combine)

for 循环用于打印各个月份,然后我使用元组解包 (*) 从字典的值中获取所有集合。这意味着您可以在字典中拥有两个以上的集合,而不会增加代码的复杂性。

【讨论】:

  • 所以代码运行良好,但是当我打印组合时,我期望春季的数字类似于以列表形式输出,所以可以说 spring = 'May': {1,2, 3,4}, 'January': {1,3,5} 我期望输出:spring: [1,3] 因为这些是春季春季唯一常见的数字......相反我的代码只是输出 set( )
  • @NickAreekadan 我刚刚更新了响应 - 对不起,我没有正确阅读输出,所以我没有注意到发生这种情况。我的坏:)
  • 哇.. 完美执行,谢谢!我只有一个问题,无论如何你可以解释一下为什么你使用元组解包更清楚一点吗?我不太明白它是如何或为什么被使用的:)
  • @NickAreekadan 从本质上讲,set.intersection() 方法可以像这样组合多个集合:set.intersection(setA, setB, setC...setZ),与 setA().intersection(setB()) 的做法不同,它只适用于 2 个集合。使用* 解包集合列表(以[{2, 4, 5, 10}, {2, 5, 10, 15}, {1, 2, 15, 17}] 开头)以将它们用作方法的参数,如下所示:set.inersection({2, 4, 5, 10}, {2, 5, 10, 15}, {1, 2, 10, 17}) 将返回{2, 10}
猜你喜欢
  • 2012-06-09
  • 2019-06-01
  • 2021-08-26
  • 2014-11-30
  • 2020-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-19
相关资源
最近更新 更多