簡體   English   中英

為什么在 python 中使用帶有 if 的方括號不會出錯

[英]Why using square brackets with if doesn't give an error in python

好的,所以我是編程方面的超級菜鳥。 編寫了一個程序來查找數組中每個元素的頻率

print("Running own")
arr = [1, 2, 8, 3, 2, 2, 2, 5, 1];
fr = [None] * len(arr)
vsi = -1
for i in range(0, len(arr)):
    count = 1
    for j in range(i + 1, len(arr)):
        if (arr[i] == arr[j]):
            count += 1
            fr[j] = vsi
            print("j={0} and fr[j]={1}".format(j, fr[j]))
    if [fr[i] != vsi]:
        fr[i] = count
print(fr)

print("fr=", fr)
print("---------------------");
print(" Element | Frequency");
print("---------------------");
for i in range(0, len(fr)):
    if(fr[i] != vsi):
        print("    " + str(arr[i]) + "    |    " + str(fr[i]));
print("---------------------")

所以我在 if 上使用方括號來檢查元素是否被訪問並將計數分配給頻率數組。(這一行: if [fr[i]:= vsi]: )在我的頭撞到牆上 5 小時后並跟蹤程序 20 次,我發現編譯器將其視為始終正確。

為什么我一開始沒有收到錯誤消息?

[fr[i] != vsi ]是一個列表,只要里面有東西,它就是真的。

例子:

if [0]:  #True
if [1]:  #True
if [""]: #True
if []:   #False

因為它將語句轉換為列表,並且對結果列表進行 boolean 檢查,所以即使內部元素為 False,列表本身也應該返回 True,因為它不為空,所以即使語法確實令人困惑,python語句在 if 條件中可用,因此這是 python 的有效語法。

就像這樣做:

a=1
b=2 
some_list = [a>b]
if some_list:
    print(f'{some_list} is Truthy')
>>>[False] is Truthy

另一個演示:

[a>b]
Out[10]: [False]
bool([a>b])
Out[11]: True

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM