假设我有一个字符串列表如下:
L = ['AB','BC','CD','EF','JK','LM']
现在我要将first item
AB
与first 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
答案 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的实现enumerate
,list generator
和slices
而不是通过{{进行简单索引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与其余元素进行比较
比赛失败!!!