• 締切済み

pythonの集合に対するpop()操作

wormholeの回答

  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.2

表記上"tanaka"が最後の要素に見えますが pythonの集合(set)は要素に順序付けのないただの集合です。 ですのでpop()で要素の取り除かれる順番に規則性を期待してはいけません。 あえていうならpythonの実装コードがルールです(なのでバージョンアップ等で実装が変われば変わります)。

skmsk1941093
質問者

お礼

回答ありがとうございました。どれが取り除かれるのか不明という仕様だというのもやや消極的ではありますが、解決と言えそうです。期待できないということで。面白いものだなと思いました。

関連するQ&A

  • Python:空集合の判定 == set():

    次のPythonコードはある練習問題の一部です fruitsという集合に対して、入力を1つづつしていくと、集合が空になります その空になったときの変数をprintしたら set() が出ました そこで if fruits == set(): というif文を判定用に入れたら、print("OK")に飛び OK が出ました 質問: 1)集合が空のとき if fruits == set(): で判定する書き方は、正しい(一般的)でしょうか? 2) if fruits == {}: ではジャッジされないのはなぜでしょうか ちなみにAIに1)が判定されてOKが出るのは、空集合は set()だから(そういう仕様だから)との回答が出ましたが、いまいち正しいのかわかりません #code fruits ={1,2,3,4,5,6} for i in range(6): fruit = int(input()) fruits.discard(fruit) # 要素が存在してもいなくても削除 #print(fruits) #最後に set() が主力 if fruits == set(): print('OK') #入力 1 2 3 4 5 6 【回答上のご注意】 回答は、解答(答え)を求めています わたしはプログラマーではありません なので昭和的な「自分で考えろ」的なものは求めていません わからなければ答えない自由があなたにはあります 不明点があれば説明いたします

  • Python リスト内の要素取り出しについて

    ProgateでPythonを1から学んでいる初心者です。 現在、じゃんけんゲーム作成のセクションに取り組んでいるのですが、その中でリストの要素取り出しについて疑問点があるため質問いたしました。 詳しくは画像を参照いただければ分かりやすいかと思うのですが、 ------------------------------ def print_hand(hand, name='ゲスト'): # 変数handsに、複数の文字列を要素に持つリストを代入してください hands = ("グー", "チョキ", "パー") # リストhandsを用いて、選択した手が出力されるように書き換えましょう print(name + 'は' + hands[hand] + 'を出しました') ------------------------------- という点に関して、なぜ hands[hand] でリスト「hands」内の要素が取り出せるのか分かりません。 この時点では、「hand」が「hands」内の要素に対応していることは、明示されていなくないですか? グーが0、チョキが1、パーが2に対応することは分かっているのですが。。。 ずぶの素人質問で申し訳ございませんが、ご教授お願いいたします。

  • 【Javascript】多次元配列の位置取得

    Javacript初心者です。 多次元配列の特定要素を含む配列の位置(何番目の配列要素か)を取得したいのですが、 わからず、お力を貸していただけないでしょうか。 下記testArrayにおいて、bloodの値に「ab」を持つ配列要素が何番目かを取得したいです。 この場合、「3」番目ということを取得したいです。 ---------- var testArray = [ {"name":"yamada","age":30,"weight":62,"blood":"a"}, {"name":"tanaka","age":28,"weight":58,"blood":"b"}, {"name":"kamimura","age":46,"weight":65,"blood":"o"}, {"name":"takahashi","age":21,"weight":70,"blood":"ab"} ]; ---------- 単純に、下記のようなindexOf要素では調べることができませんでした・・・ testArray.indexOf("ab") 多次元配列での要素の位置取得をお教えいただけませんでしょうか。

  • Python について質問です

    私はPythonの初心者です。 今Python でCSVのファイルを読んで数値だけ(数値以外に文字列や空白などがあります)を計算処理出来なくて困っています。教えて頂けませんか? 質問は、BB.csvというファイルの数値だけの合計と平均を計算したいです。 私のコードは以下です。 # coding: utf-8 import csv import re import string DATAFILE = 'BB.csv' class UnicodeDictReader(csv.DictReader): def __init__(self, f, fieldnames=None): csv.DictReader.__init__( self, f, fieldnames) def main(): total = 0 all_sum = 0 line_num = 0 with open(DATAFILE) as csvfile: reader = UnicodeDictReader(csvfile) for record in reader: # 値を数値で取得 A = int(record['38186']) B = int(record['38181']) C = int(record['38143']) item_total = A + B + C total = item_total all_sum += item_total line_num += 1 average = all_sum / reader.line_num print(" %d + %d + %d = %d " % ( A, B, C, total)) print(u"合計 %d " % all_sum) print(u"平均 %d " % average) if __name__ == '__main__': main() BB.csvは以下です、 38186,38181,38143 1,1,4 1,1,4 ,, ,, 2020,2020,2020 1412,1412,1412 625,625,625 75,75,75 75,75,75 75,75,75 75,75,75 4,4,4 4,4,4 4,4,4 7828,7828,7828 X,, 0,0,0 0,0,0 ○,, 0,0,0 0,0,0 0,0,0 ,,AAA 0,0,0 0,0,0 0,0,0 ,BBB, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 ,, 0,0,0 0,0,0 ,, 0,0,0 0,0,0 750,750,750 400,400,400 400,400,400 ,, 0,0,0 0,0,0 0,0,0 ,, 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 0,0,0 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 16,16,16 16,16,16 6,6,6 6,6,6 18,18,18 18,18,18 18,18,18 18,18,18 18,18,18 11,11,11 11,11,11 11,11,11 3,3,3 3,3,3 3,3,3 3,3,3 4,4,4 4,4,4 3,3,3 3,3,3 16,16,16 16,16,16 16,16,16 14,8,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 8,14,11 15,15,15

  • 同一ファイルからの文字列検索

    お世話になります。 今、ファイル処理を勉強しています。 hoge.txtに文字列が格納されています。 (hoge.txt) --------------------- suzuki yamada kimura tanaka ito suzuki kimura --------------------- hoge.txtの上の行より、下に検索を行い、 一致した場合、printf("HIT\n");と出力します。 動きは、 suzukiを検索文字列し、yamada~kimuraまで検索を行い、 もしヒットした場合、出力表示します。 suzukiが検索終了すると、次のyamadaを検索文字列として、 kimura~kimuraを検索します。 この動作を最後の行まで行えば終了です。 下記のfgets()で1行分を取得してからの 次の行への移行がわかりません。 FILE *fp; char name[256]; if( (fp =fopen( "hoge.txt", "r )) == NULL ){ return 0; } while( fgets(name, sizeof(name), fp ) != NULL ){ //ここで次の行以下とstrstr()で比較を行う } お手数をお掛けしますが、よろしくお願い致します。

  • C言語 関数が文字列を含む構造体を返すとき

    生徒名、テストの点数 を要素とする構造体 struct test{char name[10];int score;}; を定義し、 点数の大きいほうを返す関数 struct test Top(struct test test1,struct test test2) { if(test1.score > test2.score) return test1; else return test2; } を定義しました。(この状態では同点のとき後者を返してしまいますが) main関数内で struct test test1; struct test test2; strcpy(test1.name,"yamada"); test1.score=70; strcpy(test2.name,"tanaka"); test2.score=90; と宣言・代入したあと、Top関数が返した点数と名前を表示したいのですが、 名前の表示がうまくいってくれません。 文字配列の操作が誤っているのでしょうか? 実行したのは次の操作です。 printf("Top score = %d\n",Top(test1,test2).score); printf("Top man = %c\n",Top(test1,test2).name[0]); printf("Top man = %s\n",Top(test1,test2).name); Top score = 90 Top man = t Top man = tanaka と表示されるのを期待していたのですが、 前二つの表示が終わるとダンプを起こしてしまいます

  • メルアドをチェックする正規表現?

    こんにちは,よろしくお願いします。JavaScriptでメルアドをチェックしようと次のような文字列を,patternという変数に代入して, var pattern = "^[a-z0-9\-_.]+@[a-z\-]+(\.[a-z\-]+)*com|net|org|edu|gov|mil|int|info|biz|name|pro|museum|aero|coop|[a-z][a-z]$"; 次のようにチェックしたのですが, if(mail.match(pattern)){・・・ "aa"など,2つ以上の小文字のアルファベット文字列にマッチしてしまいます。つまり,@が入っていなくてもマッチしてしまいます。実は,正規表現の解説書を見てこのような文字列としたのですが,JavaScriptでは不都合な点があるのでしょうか?ご存知の方がいらっしゃいましたら,ご教授ください。よろしくお願いします。

  • テーブルに格納されている最後の行数が知りたい

    使用環境:mysql 5.1 内容:テーブルに格納されている最後の行数が知りたいです。 テーブル名:seito no name 1 tanaka 2 suzuki : : 100 kato のように1つのレコードに番号を振って名前をつけているのですが、 「seito」テーブルに登録されている最後の番号を取得するSQL文 を教えていただけないでしょうか? ちなみに、最後が必ず「kato」というわけではないので「seito」テーブルの noカラムにおける最後の番号を取得したいと考えてます。 上記の場合「100」番が取得できれば希望の結果となります。 よろしくお願い致します。

    • ベストアンサー
    • MySQL
  • $a = ( $b == $c ) ? $d、 この読み方について

    $data = ($a == $b && $c != $d) ? $e[ 'name' ] . '<img src="' . $f[ 'name2' ] . '" title="' . $e[ 'name' ] . '" align="bottom" border ="0">': ''; こんにちは。上のコードを読み解こうとしているのですが、少しわからないので投稿させていただきました。 いつも見慣れている演算子は if やwhile などの制御構造に使われているのですが、今回出くわしたのは今まで見たことがないパターンでよくわかりません。 多分( )内は計算しているのだと思いますが、 次の ? の用途がわかりません。 その後は変数を含む文字列を横並びにくっつけている、というのはわかります。 これについて解説しているページ、またはこの用法についてご存知のかたおられましたらご教授ください。

    • ベストアンサー
    • PHP
  • 間違っているところを教えて下さい

    次のプログラムの間違っているところを教えて下さい。 ************************************************************** package siryou; import java.io.*; import java.util.HashMap; class Meibo { private HashMap address; private HashMap age; public Meibo(String s) { address.put("yamada", "沖縄"); address.put("sato", "東京"); address.put("tanaka", "北海道"); address.put("ikeda", "アメリカ"); age.put("yamada", "21歳"); age.put("sato", "30歳"); age.put("tanaka", "55歳"); age.put("ikeda", "12歳"); } public String getAddress(String n) { String name = n; String jyuusyo = (String)address.get(name); return jyuusyo; } public String getAge(String n) { String name = n; String nennrei = (String)age.get(name); return nennrei; } } class MeiboMain { public static void main(String args[])throws IOException { System.out.println("名前を入力して下さい。"); BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str = br.readLine(); Meibo mi = new Meibo(str); mi.getAddress(str); String jyuusyo = mi.getAddress(str); System.out.println(str + "さんの住所は" + jyuusyo + "です。"); mi.getAge(str); String nennrei = mi.getAge(str); System.out.println(str + "さんの年齢は" + nennrei + "です。"); } } *************************************************************** 恐らくコンストラクタ内の処理が間違っていると思うんですが・・・ 実行すると、「NullPointerException」が出てしまいます。 渡した引数の処理がちゃんと出来ていないのかな?と思った のですが、どういう風に記述してよいのか分からなくて。 また、メソッド内で 取得した値がnullだった場合、「未設定」という文字列を戻り値と する処理を記述したいのですが、どのように書いたら良いので しょうか?

    • ベストアンサー
    • Java