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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

354閲覧

同じ値がいくつかあったら,半分にしたい.例)2つあれば1つに,4つあれば2つに

tk-3113

総合スコア21

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2022/01/20 07:03

編集2022/01/20 08:01

前提・実現したいこと

Python3で,とある関数に(ここではfにしたいと思います)リスト型でランダムに大量の小数の値が入っているのですが,2つ重複した数値が入っています.そこで,重複がないようにfを「もし同じ数値があったら1つ消す」といった動作を行いたいです.
小数の値は16桁くらいあるので,被って同じのが3つあるといったことはないと思っていたのですが,教えていただいたset()を用いて実行し,実行前後でのlist内の数をlen()で見ると
343730
171820
といくつか被っていたらしく消えてしまいました.
ヒストグラムを書こうと思っており,y軸の度数を半分にしたいといった考え方です.
順番はバラバラになっても大丈夫です.
どのようなプログラムを書けばいいか教えていただきたいです.

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

python3

1#fの中身(一部) 2f = [12.51057368788498, 11.817749828118718, 14.58359647000698, 12.627675716457086, 14.569902607773328, 12.21944622313139,...] 3#同じ値が2つ入っているので1つ消して1つにしたいです.

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答3

0

NumPyを使う方法を書いておきます。すべての出現数を半分にします。

python

1import numpy as np 2f = [12.51057368788498, 11.817749828118718, 14.58359647000698, 12.627675716457086, 14.569902607773328, 12.21944622313139, 12.627675716457086, 14.58359647000798, 12.627675716457086, 14.58359647000698, 11.817749828118718, 14.58359647000698, 12.51057368788498, 14.569902607773328, 12.21944622313139, 14.58359647000798, 14.58359647000698, 12.627675716457086] 3 4unq, cnt = np.unique(f, return_counts=True) 5out = np.repeat(unq, (cnt+1)//2) 6 7print(out) 8# [11.81774983 12.21944622 12.51057369 12.62767572 12.62767572 14.56990261 9# 14.58359647 14.58359647 14.58359647]

投稿2022/01/21 07:49

編集2022/01/21 07:51
kirara0048

総合スコア1399

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

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

tk-3113

2022/01/25 12:59

ありがとうございます.このようなやり方もあるのですね.
guest

0

ベストアンサー

以下です。

python

1>>> from collections import Counter 2>>> 3>>> f = [12.51057368788498, 11.817749828118718, 14.58359647000698, 12.627675716457086, 14.569902607773328, 12.21944622313139, 12.627675716457086, 14.58359647000798, 12.627675716457086, 14.58359647000698, 11.817749828118718, 14.58359647000698, 12.51057368788498, 14.569902607773328, 12.21944622313139, 14.58359647000798, 14.58359647000698, 12.627675716457086] 4>>> 5>>> c = Counter(f) 6>>> print(c) 7Counter({14.58359647000698: 4, 12.627675716457086: 4, 12.51057368788498: 2, 11.817749828118718: 2, 14.569902607773328: 2, 12.21944622313139: 2, 14.58359647000798: 2}) 8>>> h = [key for key in c] + [key for key in c if c[key]== 4] + [key for key in c if c[key]== 6] 9>>> print(h) 10[12.51057368788498, 11.817749828118718, 14.58359647000698, 12.627675716457086, 14.569902607773328, 12.21944622313139, 14.58359647000798, 14.58359647000698, 12.627675716457086] 11>>> print(len(f)) 1218 13>>> print(len(h)) 149

6個ある場合は3個になりますが、8個ある場合が出た場合はさらに付け加える必要があります。

投稿2022/01/20 08:25

ppaul

総合スコア24666

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

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

tk-3113

2022/01/20 08:50

ありがとうございます。できました。
ppaul

2022/01/20 09:06

訂正です。 6にも対応させるためには h = [key for key in c] + [key for key in c if c[key]>= 4] + [key for key in c if c[key]>= 6] のほうが正しいです。
tk-3113

2022/01/20 13:19

ありがとうございます.参考にさせていただきます.
guest

0

このページが参考になります
Pythonでリスト(配列)から重複した要素を削除・抽出
https://note.nkmk.me/python-list-unique-duplicate/

投稿2022/01/20 07:15

gogoweb_ikeda

総合スコア1426

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

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

tk-3113

2022/01/20 07:34

ありがとうございます。 やってみたのですが,実行前と実行後のリスト内の数をlenで見てみたところ, 343730 171820 となっており半分ではなくいくつか消えてしまってまして... 桁数が多いのでいくつか被ることはないと思い込んでしまっていました.そうした時に他になにかありますでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問