【问题标题】:Python Merging Ordered Lists' OutputPython 合并有序列表的输出
【发布时间】:2015-01-11 11:11:06
【问题描述】:

我有三个列表,我们称它们为 List1、List2 和 List3。

函数接收列表 1 和 2 作为参数,并在函数中创建 List3。

我正在尝试获取 List1 并计算其中每个唯一元素出现的次数,并将这些数字显示在仅包含这些唯一元素的列表旁边,不重复,按照该元素的第一个实例出现的顺序在列表 1 中。

细分: List1 包含许多元素,其中有一些重复项。 List2 包含 List1 中的一组唯一元素,按照它们在 List1 中出现的顺序排列。 List3 包含 List2 中每个唯一元素在 List1 中出现的次数,紧挨着该数字对应于 List2 中的唯一元素。

以下是我尝试完成此操作的方式,但我遗漏了一些东西。我可能只是对编码完全不感兴趣。请让我知道如何完成这项任务。谢谢!

def successfulTrials(List1, List2):

    List3 =[y]

    for x in List1:

        y = List1.count(i) for i in List2

            for z in List3:

                z.extend([i])

                print(z)

人们要求提供列表示例: List1 = ['一月','二月','八月','三月','一月','四月','五月','九月','六月','一月','七月','八月' , '九月', '十月', '十一月', '一月', '十二月']

List2 = ['一月','二月','三月','四月','五月','六月','七月','八月','九月','十月','十一月', '十二月']

List3 的显示如下所示: 1月4日 2月1日 8 月 2 日 3 月 1 日 4 月 1 日 5 月 1 日 9月2日 6月1日 7 月 1 日 10 月 1 日 11 月 1 日 12 月 1 日

【问题讨论】:

  • 你能举一个 List1、List2 和结果 List3 的例子吗?
  • 请不要使用List这个词。
  • 你有任何错误,因为你的函数有语法错误
  • 你能给出预期的输入和预期的输出吗??
  • 我举了一个预期输入和预期输出的例子,但它不会让我像我希望的那样垂直定向 List3 的输出。仅供参考:)

标签: python list merge count set


【解决方案1】:
List1 = ['Jan', 'Feb', 'Aug', 'Mar', 'Jan', 'Apr', 'May', 'Sep', 'Jun', 'Jan', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Jan', 'Dec']
List2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']

def successfulTrials(List1, List2):
    List3 = []
    for x in List2:
        List3.extend([List1.count(x),x])    

结果:

 [4, 'Jan', 1, 'Feb', 1, 'Mar', 1, 'Apr', 1, 'May', 1, 'Jun', 1, 'Jul', 2, 'Aug', 2, 'Sep', 1, 'Oct', 1, 'Nov', 1, 'Dec']

【讨论】:

  • 哦,有趣!那么我是否有可能做这样的事情: for x in List2: List3.extend([List1.count(x),x]) print(list1.count(x),x) ?本质上,我试图将这两个列表垂直打印在一起,左边是数字,右边是月份
【解决方案2】:

在这里使用dictionary 会更好:

>>> List1 = ['Jan', 'Feb', 'Aug', 'Mar', 'Jan', 'Apr', 'May', 'Sep', 'Jun', 'Jan', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Jan', 'Dec']
>>> List2 = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
>>> my_dict = { x:List1.count(x) for x in List2 }
>>> my_dict
{'Mar': 1, 'Feb': 1, 'Aug': 2, 'Sep': 2, 'Apr': 1, 'Jun': 1, 'Jul': 1, 'Jan': 4, 'May': 1, 'Nov': 1, 'Dec': 1, 'Oct': 1}

但如果你想列出:

>>> List3 = [ [x,List1.count(x)] for x in List2 ]
>>> List3
[['Jan', 4], ['Feb', 1], ['Mar', 1], ['Apr', 1], ['May', 1], ['Jun', 1], ['Jul', 1], ['Aug', 2], ['Sep', 2], ['Oct', 1], ['Nov', 1], ['Dec', 1]]

如果你想使用扩展:

>>> List3 = []
>>> for x in List2:
...     List3.extend([" ".join([x,str(List1.count(x))])])
... 
>>> List3
['Jan 4', 'Feb 1', 'Mar 1', 'Apr 1', 'May 1', 'Jun 1', 'Jul 1', 'Aug 2', 'Sep 2', 'Oct 1', 'Nov 1', 'Dec 1']

【讨论】:

    【解决方案3】:

    我建议你使用:

    • list 类型为 List1;
    • set List2 类型(它只存储唯一值);
    • dictionary 类型为 List3(您将拥有一对所有值及其计数)。

    所以在获得 List1 和 List2 之后,succesfulTrials 的代码将如下所示:

    def succesfulTrials(List1, List2):
        List3 = {}
        # Grab data
        for item in List2:
            List3[item] = List1.count(item)
    
        # Print data
        for (key, value) in List3.items():
            print value, key,
    

    【讨论】:

      【解决方案4】:
      list2=[]
      list3={}
      for a in List1:
          if a in list2:
              list3[a]+=1
          else:
              list2.append(a)
              list3[a]=1
      

      【讨论】:

        【解决方案5】:

        对于计算重复项,这可能很有用,请查看。

        import collections
        
        List1 = ['Jan', 'Feb', 'Aug', 'Mar', 'Jan', 'Apr', 'May', 'Sep', 'Jun', 'Jan', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Jan', 'Dec']
        
        List3 = collections.Counter(List1)
        
        print(List3)
        

        输出

        Counter({'Jan': 4, 'Aug': 2, 'Sep': 2, 'Mar': 1, 'Feb': 1, 'Apr': 1, 'Jun': 1, 'Jul': 1, 'May': 1, 'Nov': 1, 'Dec': 1, 'Oct': 1})
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-10-25
          • 2018-03-07
          • 1970-01-01
          • 2020-12-05
          • 1970-01-01
          • 2016-11-29
          • 1970-01-01
          • 2010-11-12
          相关资源
          最近更新 更多