比较python中某个时间间隔内的列表项

时间:2015-09-03 05:24:55

标签: python list

假设我有一个字符串列表如下:

L = ['AB','BC','CD','EF','JK','LM']

现在我要将first item ABfirst three items的{​​{1}}进行比较'AB','BC','CD'如果发现任何匹配,我会increase count by 1和存储在dictionary中。在此之后,我希望比较L的第二项,即BC'到了BC',' CD' EF' EF'来自BC'到下两个项目等等。第一项将与L的前三项进行比较,L的第二项将与从索引1开始的三项L进行比较,L的第三项将与从L [2]开始的三项L相比较至下三项L.的项目我怎么能在Python中做到这一点?最后一件事我将L的每个项目keys and count添加为dictionary中的值。

我的代码似乎无效。

for i in range(0,len(L)-1):

    for ii in range(i,3+i):
        count = 0

        if L[i] == L[ii]:
            count = 1 + count
            dic[L[i]] = count

3 个答案:

答案 0 :(得分:1)

您可以通过slice技术完成此操作:

L = ['AB', 'AB', 'CD', 'EF', 'JK', 'LM']
count = {key: 0 for key in L}
for i in range(len(L)):
    count[L[i]] = count[L[i]] + len([ele for ele in L[i:i+3] if ele == L[i]])

print count

输出:

{'JK': 1, 'AB': 3, 'LM': 1, 'EF': 1, 'CD': 1}

答案 1 :(得分:0)

我不太确定你要实现什么,但是这里有一些更为pythonic的实现enumeratelist generatorslices而不是通过{{进行简单索引1}}:

range

请注意,此代码的结果将是

L = ['AB', 'AB', 'CD', 'EF', 'JK', 'LM']
stats = {key: 0 for key in L}
for index, value in enumerate(L):
    lookforward = L[index:index+2]
    lookforward = [item for item in lookforward if item == value]
    value_counter = len(lookforward)
    stats[value] += value_counter

使用stats = {'AB': 3, 'EF': 1, 'JK': 1, 'CD': 1, 'LM': 1} ,因为它遵循您在文本中描述的算法。

答案 2 :(得分:0)

需要明确的是,如果你要将'AB'与'AB','BC','CD'进行比较,那么当你比较'AB'时,第一个比较循环将会返回true 'AB'。所以我假设您想要将'AB'与'BC','CD','EF'进行比较。我可以给你java中的逻辑。也许你可以在python中使用它。      列表listToCompare = {'AB','BC','CD','EF','GH','JK','LM'}

 int compStrIndex =0;
 for (String str : listToCompare){
        System.out.println("Comparing "+listToCompare.get(compStrIndex)+" with the rest of the elements");
        int x = compareString(compStrIndex, listToCompare);
        if (x==1){
            System.out.println("Got match!!!");
        }else{
            System.out.println("Match failed!!!");
        }
        compStrIndex++;
    }

private static int compareString(int compStrIndex, List<String> listToComp){
    String strToComp = listToComp.get(compStrIndex);
    int compIndex = ++compStrIndex;
    int cnt = 0;

    while(cnt<3){
        System.out.println("Comparing "+ strToComp + " with "+ listToComp.get(compIndex));
        if(strToComp.equals(listToComp.get(compIndex))){
            return 1;
        }
        compIndex++;
        cnt++;
    }

    return 0;       
}

以下是我收到的输出:
    将AB与其余元素进行比较
    将AB与BC进行比较 比较AB与CD
比较AB与EF
比赛失败!!!

将BC与其余元素进行比较
将BC与CD进行比较 比较BC和EF
将BC与GH进行比较 比赛失败!!!

将CD与其余元素进行比较
将CD与EF进行比较 CD与GH比较 将CD与JK进行比较
比赛失败!!!

将EF与其余元素进行比较
将EF与GH进行比较 比较EF与JK
比较EF与LM
比赛失败!!!

将GH与其他元素进行比较
比较GH与JK
将GH与LM进行比较 比赛失败!!!

将JK与其余元素进行比较
比较JK和LM
比赛失败!!!

将LM与其余元素进行比较
比赛失败!!!