典是一類特殊的數據元素的集合,字典的基本單元為數對,所謂數對是指類似(key,value)形式的數據。每一個數對結構包括了關鍵字key與該元素對應的value值,在一個普通字典所組成的數對集合中,關鍵字是不相等的,多重字典允許數對具有相同關鍵字。字典可以使用基本數據結構數組順序表與鏈表進行設計與實現。對與使用數組形式實現字典可直接借助javascript提供的數組key=>value,定義字典數據存儲結構。除此之外也可以通過鏈表形式實現字典的定義與數據存儲。常用數組與鏈表實現字典示意如下圖所示:
數組字典類型1
數組字典類型2
鏈表字典類型
字典結構的數組存儲與鏈式存儲示意如上圖所示,在明確字典的數據存儲形式之后可以進一步定義字典的相關數據操作,字典的操作主要包括字典長度的獲取,字典插入操作、字典刪除操作等。綜上所述,字典抽象數據類型描述如下圖所示:
字典抽象數據類型
字典抽象數據類型描述如上圖所示,本例主要結合編程所使用的JavaScript選擇語言所提供的基本類型進行字典數據結構的編程實現。JavaScript本身提供的Map對象就是字典類型數據結構,因此我們可以以該結構為基礎進行字典類的編程實現。使用JavaScript語言Map類實現抽象數據結構字典所定義的方法說明如下:
1、empty()
該函數主要用于實現判斷字典是否為空。 Map對象提供了size屬性主要用于對MAP對象長度進行判斷。當size為0表明字典為空。
2、size()
該函數主要用于實現計算字典長度 。直接返回map.size屬性值作為字典的長度。
3、find(key)
該函數主要用于實現返回關鍵字為key的數對 。使用map.has(key)對key進行判斷,如果存在則通過get方法獲取value,并返回key與value對應的數對。
4、insert(p)
該函數主要用于實現向字典中插入p數對 。直接調用map.set(key,value)插入數對。
5、erase(key)
該函數主要用于實現刪除key鍵對應的數對 。直接調用map.delete(key)從map中刪除元素。
6、has(p):
該函數主要用于實現判斷字典中是否存在p數對,存在返回true,否則返回false。使用map.has()進行判斷。如果存在key則進一步判斷對應的值是否與參數提供的值相等。
7、clear()
該函數主要用于實現清除字典數組 。使用map.clear()刪除元素。
以上給出在JavaScript下自定義字典類的基本方法描述,由此可見借助Map對象可以非常方便實現字典類的定義與編寫。甚至在實際使用過程中直接使用Map表示字典。字典類實現過程中需要使用到一個結構為數對。因此我們首先定了字典數對類,該類描述如下:
數對類
以所定義的數對為基礎,結合Map實例化對象的使用我們可以進一步完成字典類的定義,字典類的定義描述如下:
字典類設計
字典類定義如上圖所示,類提供構造函數用于實現在類實例化過程中完成Map對象的實例化。該類主要方法描述如下圖:
empty函數
find函數
clear與has函數
insert與erase函數
本頭條號長期關注編程資訊分享;編程課程、素材、代碼分享及編程培訓。如果您對以上方面有興趣或代碼錯誤、建議與意見,可以聯系作者,共同探討。期待大家關注!如需案例完整代碼請關注并私信,往期數據結構文章鏈接如下:
數據結構-JavaScript線性表的數組描述與實現
數據結構-JavaScript鏈表的設計與實現
數據結構-JS優先隊列實現及排序應用
數據結構-使用JavaScript編程實現隊列(Queue)
者 | Ruqayyah Sara
譯者 | 彎月,責編 | 伍杏玲
出品 | CSDN(ID:CSDNnews)
我是一名全棧開發。前幾天我一直在研究算法和數據結構,因為對于程序員而言,最重要能力的就是解決問題,所有任何程序員都應該擁有強大的解決問題的基礎能力。
兩天前我開始學習Python,開始對這門語言有了更多的理解。我開始將其與JavaScript進行比較,因為JavaScript是我日常工作中使用的語言。
JavaScript和Python是兩門非常重要的語言。盡管包括我在內的許多人都知道Python或JavaScript,但我們并不清楚兩種語言之間的重要區別。
我注意到這兩門年語言有許多語義上的區別,相信理解這些區別對我和對其他人都有很大幫助。在本文中,我會比較我在兩門語言中遇到的一些基礎概念。所以,如果你熟悉JavaScript或Python,想了解二者的差異,那么你就來對地方了!
使用雙斜線(//)作為單行注釋,/* */ 作為多行注釋。
使用 # 作為單行注釋,使用三引號""" """ 作為多行注釋。
JavaScript中的每個代碼塊都必須放在花括號({})中,每條語句必須使用分號 ; 結束。
var a=2;
if(a>0){
console.log("Positive");
}
else{
console.log("Negative");
}
Python中的代碼塊使用縮進表示。它不使用花括號或圓括號,而是使用空白。每條語句都需要換行。
a=2
if a>0:
print("Positive")
else:
print("negative")
print("does not belong to else block")
數據類型
我無法在本文中完整地討論JavaScript和Python之間的數據類型差異,這里我們只討論主要的差異。
基本數據類型
上面的表格展示了JavaScript和Python的基本數據類型。JavaScript中的Number類型表示Int和float值,由編譯器在運行時確定。而JavaScript(ES10)中的BigInt用于存儲大整數,而Python使用Int表示所有尺寸的整數。
JS使用關鍵字表示空值,Python使用None。
Python沒有undefined和symbol的概念,這些是JavaScript特有的。
Python有一種特殊的數據類型——complex,用于表示復數 x + yj,其中x是實部,y是虛部。
a=3+4j
print(a.real) #3
print(a.imag) #4
非基本數據類型
上圖展示了復雜的(或者叫做非基本)數據類型。Python中的列表能存儲任何數據類型,與JavaScript一樣。
但是Python中的數組可以使用庫(如NumPy,array)來定義。Python中的數組只能包含統一數據類型。Python中的列表和數組有很大區別。數組上可以執行多種數學操作,而列表不能。
JavaScript中的對象類似于Python中的字典。兩者都包含鍵值對。但對象是JavaScript中的基本組成部分,而字典在Python中只不過是個數據容器。
Python中的元組是一個不可修改的列表。用元組表示的列表無法被重新定義。而JavaScript沒有這個概念。
因此,Python擁有內置的哈希表(字典),而JavaScript沒有內置的哈希表、方法或庫。
在JavaScript中定義變量需要使用三種主要的關鍵字:var,let和const。定義方法決定了變量的使用方式(以及作用域)。
Python中定義變量不需要使用關鍵字,只需要給變量名直接賦值即可:
a=3
print (a) # 3
If-Else
JavaScript
JavaScript中的條件語句是 if、else if、else還有switch。
Python中的條件語句是if、elif和else。
elif是else-if的縮寫。Python沒有switch語句。相反,可以用字典來代替。
JavaScript的三元運算符(?:)是一個條件運算符,語法為(condition)?(expresssionIfTrue):(expressionIfFalse):
var age=26;
var beverage=(age >=21) ? "Beer" : "Juice";
console.log(beverage); // "Beer"
Python中的三元運算符的語法是 (expressionIfTrue) if (condition) else (expressionIfFalse)
a, b=10, 20
min=a if a < b else b
print(min)
全等運算符
全等運算符(===)也叫“嚴格相等運算符”,會比較兩個運算數并檢查其相等性,而不會進行類型轉換,也就是說,它會檢查運算數的數據類型。返回值為布爾。JavaScript只有一個全等運算符。
var a=3,b="3";
console.log(a==b); // true
console.log(a===b); // false
Python有兩個全等運算符:is 和 is not。
is 運算符會測試兩個運算數是否為同一個對象,is not為is的反面。
x=5
if (type(x) is int):
print ("true") # true
if ( type(x) is not int):
print ("true")
成員運算符
成員運算符檢查對象中的特定屬性。JavaScript只有一個成員運算符:in。
const user={name: 'Sara', age: 19, sex: "female"};
console.log('name' in car);
// output: true
成員運算符用于驗證某個值是否為成員。Python有兩個成員運算符:in和not in。
x=24
y=20
list=[10, 20, 30, 40, 50 ]
if ( x not in list ):
print ("not present") # Output:True
循環
JavaScript有三種循環:
入口控制循環:for和while(在執行循環語句之前測試條件)
出口控制循環:do-while(執行循環語句之后測試條件)
// for loop
var c=["red", "green", "blue", "purple"];
for (var i=0; i<4; i++){
console.log(c[i]);
}
// prints array// while
var c=["red", "green", "blue", "purple"];
while(i<4){
console.log(c[i]);
i++;
} // prints array
Python有兩種循環:for和while。Python沒有內置的do-while循環。
Python的while循環與JavaScript的for循環類似。例如下面的例子:
c=["red", "green", "blue", "purple"]
i=0
while i<4:
print(c[i])
i +=1 # i++ is invalid
Python不支持++和--運算符。我們需要使用x+=1和x-=1。
for循環用來遍歷序列(列表、數組和元組)。它使用in操作符和range函數進行迭代。可以用range生成一系列數字,該函數接受三個參數:start,stop和step。
start:開始的位置(可選)。默認為0。
stop:結束的位置(必須指定)。
step:指定序列中兩個數字之間的間隔(可選)。
x=range(5)
for n in x:
print(n) # 1,2,3,4x=range(3,9)
for n in x:
print(n) # 3,4,5,6,7,8x=range(2,20,2)
for n in x:
print(n) # 2,4,6,8,10,12,14,16,18
以上就是我注意到的最基本的JavaScript和Python之間的語義區別。
原文鏈接:https://medium.com/better-programming/semantic-differences-between-javascript-and-python-ed21b1f3ce50
本文為 CSDN 翻譯,轉載請注明來源出處。
幫朋友找回密碼,需要生成一個密碼字典,然后就寫了一個生成函數。找回過程中,感嘆密碼如果太短,真的是一點安全都沒有。下面請看測試用例。
words參數:二維數組,長度不限。
function generatePasswordDictionary(words) {
const dictionary=[];
(function generate(index, parentWord) {
if (index >=words.length) return dictionary.push(parentWord);
words[index].forEach((currentWord)=> {
generate(index + 1, parentWord + currentWord);
});
})(0, "");
return dictionary;
}
生成結果
const fs=require("fs");
// 根據情況傳入參數即可。
const dictionary=generatePasswordDictionary([
["i", "I","love", "Love", "LOVE","My", "MY", "my", "mY","country", "counTry", "countrY"],
["i", "I","love", "Love", "LOVE","My", "MY", "my", "mY","country", "counTry", "countrY"],
["i", "I","love", "Love", "LOVE","My", "MY", "my", "mY","country", "counTry", "countrY"],
["i", "I","love", "Love", "LOVE","My", "MY", "my", "mY","country", "counTry", "countrY"],
]);
console.log(dictionary);
//輸出到文件
fs.writeFile("./password.txt", dictionary.join("\n"), ()=> {});
人人為我,我為人人,謝謝您的瀏覽,我們一起加油吧。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。