質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

3887閲覧

zip(*)の意味がわからない

gunmed

総合スコア55

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/04/03 00:33

pythonの初心者です。
今回は以下のコードにおけるzip()のがどういった機能で利用されているかわからないので、質問させていただきます。以下のコードは参考サイトより引用させていただきます。

from janome.tokenizer import Tokenizer import collections t = Tokenizer() s = '人民の人民による人民のための政治' c = collections.Counter(t.tokenize(s, wakati=True)) mc = c.most_common() # [('人民', 3), ('の', 3), ('による', 1), ('ため', 1), ('政治', 1)] words, counts = zip(*c.most_common()) print(words) # ('人民', 'の', 'による', 'ため', '政治') print(counts) # (3, 3, 1, 1, 1)

上記のコードのmc = c.most_common()によりword,numのタプルのリストができました。
それをwords, countsに代入することで,
タプルの要素を別々に表示できるという主旨のコードです。


疑問点

zip()というのはことなる2つのリストを引数としていれることで、そのリストの順番が同じものをタプルのセットとして返してくれると解釈しています。

なので、mcは一つのリストなのでzipをなぜ使うのかよくわかりません。
たぶん*が関係しているのではと思ったので、*を消してみると
too many values to unpack (expected 2)
というエラーがでました。

アンパックというのを調べるとそれは変数にアスタリスクをつけると、変数に対して代入する要素が多かった場合に、アスタリスクのついた変数にすべてタプルとして代入されるというものでした。

あくまで、変数にアスタリスクをつける処理であって、zip(*)については言及されておらず、解決しなかったので、質問させていただきます。
回答いただけると幸いです。

mac 10.14.1

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

*をつけることで、イテラブル内の要素が個々の引数としてzipに渡されるため、words, counts = zip(('人民', 3), ('の', 3), ('による', 1), ('ため', 1), ('政治', 1))が実行されるのと同じことになります。
そのため、各引数となっているタプル0番目の要素で作られたタプルがwordに、1番目の要素で作られたタプルがcountsに入ります。

投稿2019/04/03 00:42

編集2019/04/03 00:43
Udomomo

総合スコア1524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gunmed

2019/04/05 10:05

回答ありがとうございます。 なるほど、個々としての要素が入るのですね。 よくわかりました。ありがとうございました。
guest

0

pythonのアスタリスクには様々な使いみちがあります。

こういう記事があるので御覧ください。

Python3.xのアスタリスク逆引き - Qiita

投稿2019/04/03 06:10

hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gunmed

2019/04/05 10:07

回答ありがとうございます。 アスタリスクは奥が深いですね...。 勉強になりました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問