Python合并有序列表'产量

时间:2014-11-14 05:35:26

标签: python list merge count set

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

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

我试图获取List1并计算其中每个唯一元素出现的次数,并按照第一个实例的顺序在那些唯一元素的列表旁边显示这些数字,而不重复元素出现在List1中。

细分: 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 = [' Jan',' Feb',' Aug',' Mar',' Jan',&# 39; Apr',' May',' Sep'' Jun'' Jan'' Jul&#39 ,' 8月' 9月' 10月' 11月' 1月' 1月'' ;十二月']

List2 = [' Jan',' Feb',' Mar',' Apr',' May' ,' Jun' Jul',' Aug',' Sep'' Oct',' Nov',' Dec']

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日

5 个答案:

答案 0 :(得分: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']

答案 1 :(得分:0)

list2=[]
list3={}
for a in List1:
    if a in list2:
        list3[a]+=1
    else:
        list2.append(a)
        list3[a]=1

答案 2 :(得分:0)

使用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]]

如果你想使用extend:

>>> 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 :(得分:0)

我建议您使用:

    列表1的
  • list类型;
  • Listi的
  • set类型(它只存储唯一值);
  • List3的
  • dictionary类型(您将拥有所有值及其计数的对)。

因此,在获取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 :(得分:0)

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

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})