列出在Python中操作的顺序

时间:2012-01-06 03:24:57

标签: python list

我有两个python列表如下:

ListA = [a1,a2,a1,a3,a2,a4,a5,a4]
ListB = [b1,b2,b1,b3,b2,b4,b5,b4]

我想要的是在两个列表中找到相等的元素并将它们打印在一个文件中。我在列表中找到了相同的元素,并将它们添加到两个新列表中,如下所示:

[a1,a2,a4]
[b1,b2,b4]

我想将一些参数与ListA中的元素进行比较,如果ListA中的元素与参数相等,则打印ListB中的相应元素。我这样做如下。

for i,j in enumerate(ListA):
    if j == paramname:
        filelines.append('%sTransferSourceName = "%s"\n'%(indent,ListB[i]))

我的问题是该元素不符合ListB的顺序。它添加如下:

b2,b4,b1

所以整个订单混乱了。 请注意,列表中每个元素的字母数可能不同。

这是我到目前为止所做的代码:

  

def ProcessLinks():

duplicates = [x for x in linkparamArray if linkparamArray.count(x) > 1]

linkstemp = list(set(duplicates))
for i in linkstemp:

    links.append(i)

def ProcessLinks2():

duplicates2 = [x for x in linkparameterArray if linkparameterArray.count(x) > 1]

linkstemp2 = list(set(duplicates2))
for j in linkstemp2:

    linkparameters.append(j)

以下是比较代码:

paramname = a1

  

for i,j in zip(linkparameters,links):

                if i == paramname:
                    filelines.append('%s         TransferSourceName = "%s"\n(indent,j))

2 个答案:

答案 0 :(得分:1)

您可以使用collections.Counter来确定重复元素。

>>> ListA = ['a1','a2','a1','a3','a2','a4','a5','a4']
>>> ListB = ['b1','b2','b1','b3','b2','b4','b5','b4']
>>> cB=collections.Counter(ListB)
>>> cA=x=collections.Counter(ListA)
>>> [i for i in cA if cA[i]>1]
['a1', 'a2', 'a4']
>>> [i for i in cB if cB[i]>1]
['b4', 'b1', 'b2']

根据OP的评论,因为订单比以下解决方案可能有用(OrderedDict)[http://docs.python.org/library/collections.html#collections.OrderedDict]

dB=collections.OrderedDict()
dA=collections.OrderedDict()
>>> for a in ListB:
    dB.setdefault(a,0)
    dB[b]+=1

>>> for b in ListB:
    dB.setdefault(b,0)
    dB[b]+=1

>>> [i for i in dA if dA[i]>1]
['a1', 'a2', 'a4']
>>> [i for i in dB if dB[i]>1]
['b1', 'b2', 'b4']

答案 1 :(得分:0)

“等元素”是指重复元素吗?

什么是'缩进'?

使用字典的问题是您不能拥有重复的密钥。因此,如果您要使用两个列表构建字典,则字典将仅包含重复列表中每个元素的一个条目(键,值对)。