1. 程式人生 > 其它 >pandas 儲存csv_Pandas學習之旅:to_csv()缺失處理

pandas 儲存csv_Pandas學習之旅:to_csv()缺失處理

技術標籤:總結

S T L ( S t a n d a r d T e m p l a t e L i b r a r y ) \mathcal{STL}(\mathcal{Standard\ Template\ Library}) STL(StandardTemplateLibrary)


  1. q u e u e queue queue (佇列):

    這是一種先進先出的資料結構,主要操作有

    操作功能
    f r o n t ( ) front() front()返回隊尾元素的值
    p o p ( ) pop() pop()彈出隊頭元素
    p u s h ( x ) push(x) pu
    sh(x)
    x x x 壓入隊尾
    e m p t y ( ) empty() empty()如果佇列為空,返回 t r u e true true
    s i z e ( ) size() size()返回當前佇列內元素個數

    海港 O J \mathcal{OJ} OJ

    這道題主要思路是用一個佇列維護時間,再用一個佇列記錄這個人的國籍

    程式碼:

    #include <queue>
    #include <cstdio>
    using namespace std;
    const int TIME = 86400;
    int n, Countries_, t, k, x, f[ 100005 ]
    ; queue <int> Time, PeoPle; int main () { scanf ("%d", &n); for (int i = 1; i <= n; i ++) { scanf ("%d %d", &t, &k); while (k --) { Time.push(t); scanf ("%d", &x); PeoPle.push(x); Countries_ +
    = f[ x ] == 0 ? 1 : 0;//當這個人是該國家唯一到達的人時,國家數加加 f[ x ] ++; } while (Time.empty() == false and t - Time.front() >= TIME) {//在每艘船到達後,維護佇列,將不滿足條件的人彈出佇列,並判斷該國是否有人在24小時內到達 Time.pop(); if (-- f[ PeoPle.front() ] == 0) { Countries_ --; } PeoPle.pop(); } printf ("%d\n", Countries_); } return 0; }

  1. s t a c k ( stack( stack( ) ) )

    在我看來,棧與佇列相當於孿生兄弟,但是佇列 p o p ( ) pop() pop() 彈出隊頭元素,先進先出;棧 p o p ( ) pop() pop() 彈出棧頂元素,先進後出
    棧

    主要操作:

    操作功能
    t o p ( ) top() top()返回棧頂元素的值
    p o p ( ) pop() pop()彈出棧頂元素
    p u s h ( x ) push(x) push(x) x x x 壓入棧頂
    e m p t y ( ) empty() empty()如果棧頂元素為空,返回 t r u e true true
    s i z e ( ) size() size()返回當前棧內元素個數

    例題 表示式括號匹配 O J \mathcal{OJ} OJ

    思路:如果當前第i位是右括號, 則判斷如果前面有左括號且並未用過。若有,將其彈出棧,否則直接輸出 N O NO NO
    程式碼:
    #include <stack>
    #include <cstdio>
    using namespace std;
    stack <char> s;
    int n;
    char c;
    int main () {
    	while (scanf ("%c", &c) != EOF && c != '@') {
    		if (c == '(') {//如果c是左括號,將其push進棧,以便於後面判斷
    			s.push(c);
    		}
    		else if (c == ')') {
    			if (s.empty() == true) {//如果棧為空,即前方無可用左括號,則輸出"NO"
    				puts("NO");
    				return 0;
    			}
    			s.pop();//若有可用左括號,將左括號彈出,當成已用過
    		}
    	}
    	if (s.empty() == true) {//如果左括號用完,輸出"YES"
    		puts("YES");
    		return 0;
    	}
    	puts("NO");
    	return 0;
    } 
    

  1. v e c t o r vector vector(順序容器,不定長陣列):

    和陣列差不多,但比陣列優越。特徵是相當於可分配拓展的陣列。它的隨機訪問、在末端插入和刪除快,但在中間插入和刪除慢。

    主要操作:

    操作功能
    p u s h _ b a c k ( x ) push\_back(x) push_back(x) v e c t o r vector vector 的末尾插入變數 x x x
    p o p pop pop_ b a c k ( ) back() back()去掉 v e c t o r vector vector 的末尾資料
    f r o n t ( ) front() front()返回 v e c t o r vector vector 第一個元素
    b e g i n ( ) begin() begin()返回 v e c t o r vector vector 頭的指標
    e n d ( ) end() end()返回 v e c t o r vector vector 最後一個單元 + 1 +1 +1 的指標
    c l e a r ( ) clear() clear()清除 v e c t o r vector vector 所有資料
    e m p t y ( ) empty() empty()如果 v e c t o r vector vector 為空,返回 t r u e true true
    e r a s e ( t ) erase(t) erase(t)刪除t位置的資料
    e r a s e ( B e g i n , E n d ) erase(Begin, End) erase(Begin,End)刪除 [ B e g i n , E n d ) [Begin, End) [Begin,End) 區間的資料
    s i z e ( ) size() size()返回當前 v e c t o r vector vector中資料個數
    i n s e r t ( t , d a t a ) insert(t, data) insert(t,data)在t處插入資料 d a t a data data

  1. m a p map map(關聯容器、有序無重複):

    它提供一對一(其中第一個稱為關鍵字,每個關鍵字只在 m a p map map 中出現一次,第二個稱為該關鍵字的值)的資料處理能力

    注意:

    1. m a p map map 內部所有的資料都是有序的(紅黑樹)
    2. 對於迭代器來說,可以修改實值,但不能修改 k e y key key

    例題 詞典 O J \mathcal{OJ} OJ

    程式碼:
    #include <map> 
    #include <cstdio>
    #include <iostream>
    using namespace std;
    map <string, string> Dictionary;
    string s, s2;
    char a[ 155 ], b[ 155 ];
    int main () {
    	while (getline(cin, s, '\n')) {
    		if (s == "") {
    			break;
    		}
    		sscanf(s.c_str(), "%s %s", a, b);
    		Dictionary[ b ] = a;
    	}
    	while (cin >> s) {
    		if (Dictionary[ s ] == "\0") {
    			puts("eh");
    		}
    		else {
    			cout << Dictionary[ s ] << endl;
    		}
    	}
    	return 0;
    }
    

  1. s e t set set(關聯容器,集合):

    s e t set set是“集合”的意思, s e t set set 中元素都是唯一的,預設情況下會對元素自動進行升序排列,如果需要集合中的元素允許重複那麼可以使用 m u l t i s e t multiset multiset

    主要操作:

    操作功能
    b e g i n ( ) begin() begin()返回 s e t set set 中的第一個元素
    e n d ( ) end() end()返回 s e t set set 中的最後一個元素
    c l e a r ( ) clear() clear()刪除 s e t set set 中的所有資料
    e m p t y ( ) empty() empty()如果 s e t set set 為空,返回 t r u e true true
    i n s e r t ( ) insert() insert()插入一個元素
    e r a s e ( ) erase() erase()刪除一個元素
    s i z e ( ) size() size()返回當前 s e t set set中元素個數
    c o u n t ( ) count() count()返回 s e t set set中某個值元素的個數
    f i n d ( ) find() find()返回一個指向被查詢到元素的迭代器
    l o w e r _ b o u n d ( ) lower\_bound() lower_bound()返回指向第一個 ≥ \geq 某個值的元素的迭代器
    u p p e r _ b o u n d ( ) upper\_bound() upper_bound()返回第一個>某個值的元素的迭代器

    提示:若想讓 s e t set set 以降序排序,可使用 s e t < i n t , g r e a t e r < i n t > > set<int,\ greater\ < int >\ > set<int,greater<int>>


  1. p r i o r i t y _ q u e u e priority\_queue priority_queue(優先佇列)

    定義:任何時刻,隊首元素一定是當前佇列中優先順序最高(優先值最大)的那一個(大根堆),也可以是最小的那一個(小根堆),可以不斷向優先佇列中新增某個優先順序的元素,也可以不斷彈出優先順序最高的元素,每次操作會自動調整結構,始終保證隊首元素的優先順序最高。(懵逼 )

    主要操作:

    操作功能時間複雜度
    p u s h ( ) push() push() x x x 加入優先佇列 O ( l o g 2 n ) , n O(log_2{n}),n O(log2n),n 為元素個數
    p o p ( ) pop() pop()隊首元素出隊 O ( l o g 2 n ) , n O(log_2{n}),n O(log2n),n 為元素個數
    t o p ( ) top() top()獲得隊首元素 O ( 1 ) O(1) O(1)
    e m p t y ( ) empty() empty()如果優先佇列為空,返回 t r u e true true O ( 1 ) O(1) O(1)
    s i z e ( ) size() size()返回 p r i o r i t y _ q u e u e priority\_queue priority_queue 內元素的個數 O ( 1 ) O(1) O(1)

    重點:

    p r i o r i t y _ q u e u e < i n t > q < = > p r i o r i t y _ q u e u e < i n t , v e c t o r < i n t > , l e s s < i n t > > q priority\_queue<int>\ q\ <=>\ priority\_queue<int,\ vector<int>,\ less<int>\ >\ q priority_queue<int>q<=>priority_queue<int,vector<int>,less<int>>q (升序)
    p r i o r i t y _ q u e u e < i n t , v e c t o r < i n t > , g r e a t e r < i n t > > q priority\_queue<int,\ vector<int>,\ greater<int>\ >\ q priority_queue<int,vector<int>,greater<int>>q (降序)

    例題 合併果子 O J \mathcal{OJ} OJ

    程式碼:

    #include <cstdio>
    #include <queue> 
    #include <vector>
    using namespace std;
    priority_queue <int,vector<int>,greater<int> > q;//升序
    int n, a, tot;
    int main () {
        scanf ("%d", &n);
        for (int i = 1; i <= n; i ++) {
            scanf ("%d", &a);
            q.push (a);
        }
        for (int i = 1; i < n; i ++) {//貪心
            int x = q.top ();
            q.pop ();
            x += q.top ();
            q.pop ();
            q.push (x);
            tot += x;
        }
        printf ("%d\n", tot);
        return 0;
    }