2015-10-21 78 views
1

的每个位置我有两个阵列比较元件以阵列

a = [ab,bc,cd] 
b = [bc,ab,cd] 

我想的每个元素counter -1和显示counter

比较的b各自元素,然后增加 counter += 1如果它们匹配,否则
counter=0 
for i in a: 
for j in b: 
    if a[i-1] == b[j-1]: 
     counter = counter + 1 
    elif a[i-1] != b[j-1]: 
     counter = counter - 1 
    print counter 

我越来越奇怪的结果,我是新的编程和帮助表示赞赏。

对不起,复制粘贴错误

+0

你”重新测试相同的条件两次。 – interjay

+0

那么你究竟想要为你的例子列表得到输出?假设列表中有字符串 –

+0

在''中为'i做''遍历**成员**,而不是'a'的**索引**。这意味着,在循环的每次迭代中,“i”将是存储在列表“a”(“ab”,然后是“bc”,然后是“cd”)中的值之一。尝试直接比较'i'到'j'。 – zayora

回答

2

elif条件是一样的你if,这可能是为什么它不为你工作。事实上,你甚至不需要那里的条件;它应该只是一个else,因为您想要捕捉与if不匹配的所有内容。

也就是说,这种方式好得多:

from itertools import product 
counter = sum(1 if x==y else -1 for x, y in product(a, b)) 
0

您可以使用集:

a = ['ab','bc','cd'] 
b = ['bc','ab','cd'] 

print(len(set(a).intersection(set(b)))) 

3 
0
a = ['ab','bc','cd'] 
b = ['bc','ab','cd'] 

counter = 0 
for i in a: 
    for j in b: 
     if i == j: 
      counter += 1 
     else: 
      counter -= 1 
print counter 
-1

只是一个短期和快速替代:

sum(2*b.count(x) - len(b) for x in a)