タイトルの通り、appendとextendの動作の違いについてどうしてもわからないので質問させて下さい。
Python3.6,MySQLは5.7の環境で使用しています。
私が、オライリーの「入門 Python3」を読む中で得たappendとextendの認識は以下です。
append・・・リストの末尾にひとつずつ追加する
extend・・・複数のリストをまとめる
この認識のみなのでしょうか・・・。
問題は以下のコードの時に出力される、結果が予想されるものと違うことです。
(単純にするために、実際のコードを変更しています。)
プログラミング能力が低いうえに、Python歴も浅いため読みにくいかと思います。すみません・・・。
処理のおおまかな流れとしては、
(検索する)dictのkeyを(検索される)listから検索して、一致すれば一致したものだけを別のdictにまとめておくといった処理です。
def getdata(): # タイトルとURLの取得ー辞書(検索するdict) gettilte_urls = {} gettilte_urls = get_title() #ディクショナリで取得ーtitle(タイトル) val([0]年月, [1]URL) #SQL取得ーリスト(検索されるlist) list_dbtitledata = [] list_dbtitledata = db_titledata() #辞書キー(タイトル)からDBタイトルリストを検索。なければターゲットリストに追加 dict_targets_datas = {} #タイトルとURLを格納するdict # 検索 for key_title, val in gettilte_urls.items(): if key_title in list_dbtitledata: pass else: print(key_title + 'は存在しません。追加対象にします') dict_targets_datas[key_title] = val def db_titledata(): """ MySQLの現在のタイトルを全て取得してリストで返却 """ <省略> QUERY = "SELECT title FROM article;" cur.execute(QUERY) # 実行結果をすべて取得する rows = cur.fetchall() titledata = [] # タイトルデータをリストに格納 for row in rows: titledata.append(row) #←****問題はここです**** #確認のため、タイトルデータを出力 for title in titledata: print(title) cur.close con.close return titledata
def db_titledata():の
上記のようにtitledata.append(row)で処理をすると、うまく検索できません。
printの結果はターミナル上で、
('タイトル1\u3000ver1',)
('タイトル2',)
('タイトル3',)
と表示されます。
titledata.extend(row)で処理をすると望んだ結果が得られます。検索のループもうまく機能します。
printの結果はターミナル上で、
タイトル1 ver1
タイトル2
タイトル3
と表示されます。appendとextendの違いはあくまで、変数を末尾に追加かリストでまとめて追加という違いの認識しかないのですが、
このようにappendとextendで違う結果が得られるのはなぜでしょうか?
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/04/17 07:46
2017/04/17 09:23