如果elif不匹配的结果很简单

时间:2018-05-05 13:03:45

标签: python arrays for-loop if-statement

if - elif简单明了。 index是一维数组,其值仅为0 - 5。正如您从图片中看到的那样,唯一正确的if - elif仅适用于index[i]==0index[i]==1。对于index[i]==5,应该打印 f ,但结果打印为 d 。出了什么问题?

当前输出:

screenshot of output

for i in index:
    print(i)
    if index[i]==0:
      print(" :a")
    elif index[i]==1:
        print(" :b")
    elif index[i]==2:
        print(" :c")
    elif index[i]==3:
        print(" :d")
    elif index[i]==4:
        print(" :e")
    elif index[i]==5:
        print(" :f")

2 个答案:

答案 0 :(得分:0)

我已经尝试过您的代码,问题与每个循环中的索引和值之间存在混淆的事实有关。

这里,使用enumerate,我可以在每个循环中访问索引和值:

:- use_module(library(lists)).

pivoting(_,[],[],[]).
pivoting((A,B),[(C,D)|T],[(C,D)|L],G):-D>B,pivoting((A,B),T,L,G).
pivoting((A,B),[(C,D)|T],[(C,D)|L],G):-D=B,C>A,pivoting((A,B),T,L,G).
pivoting((A,B),[(C,D)|T],L,[(C,D)|G]):-D<B,pivoting((A,B),T,L,G).
pivoting((A,B),[(C,D)|T],L,[(C,D)|G]):-D=B,C<A,pivoting((A,B),T,L,G).
pivoting((A,B),[(C,D)|T],L,G):-A=C,D=B,pivoting((A,B),T,L,G).

quick_sort(List,Sorted):-q_sort(List,[],Sorted).
q_sort([],Acc,Acc).
q_sort([H|T],Acc,Sorted):-
    pivoting(H,T,L1,L2),
    q_sort(L1,Acc,Sorted1),q_sort(L2,[H|Sorted1],Sorted).

答案 1 :(得分:0)

您可以通过避免那些使用字典映射到所需值的if elif来缩短您的代码:

index = [1, 5, 5, 5, 5, 4, 4, 4, 0]
map_dict = {0: "a", 1: "b", 2: "c", 3: "d", 4: "e", 5: "f"}

for i in index:
    print(map_dict.get(i))

# b
# f                                                        
# f                                                      
# f                                                        
# f                                                         
# e                                                  
# e                                                      
# e                                                       
# a                                                         

修改

要计算输出中每个项目的计数:

from collections import Counter

index = [1, 5, 5, 5, 5, 4, 4, 4, 0]
map_dict = {0: "a", 1: "b", 2: "c", 3: "d", 4: "e", 5: "f"}

lst = []
for i in index:
    value = map_dict.get(i)
    print(value)
    lst.append(value)

print(Counter(lst))