Python3関連のことを調べてみた

Python3関連のことを調べてみた

探索アルゴリズム①【Algorithm-Data構造入門Ⅴ】

# 探索アルゴリズムとは
探索アルゴリズムは、データの集合の中から特定の要素を見つけるための手法です。
2回に分けて主要な探索アルゴリズムを備忘録的にまとめていきます。

# 基本的な探索アルゴリズム
ここでは、よく使われる基本的な探索アルゴリズムとして以下の4つを紹介します。
– 線形探索(Linear Search)
– 2分探索法(Binary Search)
– ハッシュ法(hashing)←次回紹介
– 2分探索木(binary tree)←次回紹介

それぞれ、Pythonでの実装方法も紹介していきます。

# 線形探索(Linear Search)
線形探索(Linear Search)は、データの集合(通常はリストや配列など)を先頭から順番に走査し、目的の要素を探す探索アルゴリズムです。具体的には、最初の要素から順に目的の要素と比較し、一致するかどうかを確認します。もし一致する要素が見つかれば、その位置を返して探索を終了します。しかし、見つからない場合は、全ての要素を比較し終えるまで探索を続けます。

### メリット・デメリット
線形探索は非常に単純で実装が容易ですが

元記事を表示

累積和

https://paiza.jp/works/mondai/query_primer/query_primer__cumulative_sum

ひとまずやってみたのですが、
ケース3と4でタイムオーバーになってしまいました。

“`py

N, K = map(int,input().split())
A = [int(input()) for _ in range(N)]
B = [int(input()) for _ in range(K)]

for i in B:
sum = 0

for j in range(0,i):
sum += A[j]

print(sum)

“`

テーマが累積和っていうらしいですが
“`
A_1 から A_i までの和を sum[i] とすると、
sum[i] = sum[i-1] + A[i] という関係が成り立つので
すべての i について sum[i] を計算しておく

“`
ん???
ちょっとよくわかりませんでした。。。
でも調べると、

たとえば
3つの配列の要素が下

元記事を表示

map3d_20240404

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
import os
import glob
import csv
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage.filters import maximum_filter
import math
import fabio
import seaborn as sns
from scipy import ndimage as ndi
from tqdm import tqdm
from sklearn.cluster import KMeans
from sklearn import cluster, preprocessing, mixture
from sklearn import metrics

os.chdir(‘D:\\’) #入力

cur_path = os

元記事を表示

map20240404_nnyd

import os
import glob
import csv
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.cm as cm
from scipy.interpolate import griddata

cur_path = os.getcwd()
print(cur_path)

csv_files =glob.glob(‘*.csv’)
df = pd.DataFrame()

for a in csv_files:
print(a)

data_list=[]

for file in csv_files:
data_list.append(pd.read_csv(file))
df = pd.concat(data_list, sort=False)

cur_path = os.getcwd()
print(cur_path)

csv_files =glob.glob(‘*.csv’)
df = pd.DataFrame

元記事を表示

【Python】指定したデリミタで文章を分割し、リストの要素としてそれぞれ追加する方法

# 概要
句点で区切られている文章を、句点ごとに区切ってリストに変換する方法を紹介します。

複数の文からなる文章を指定したデリミタ(句点など)で分割し、それぞれの部分にデリミタを追加するという処理を行います。

# サンプルコード

例えば、
“`
‘私はりんごが好きです。また、バナナも良いですよね。皆さんの好きなフルーツ教えてください。’
“`
という文章を「。」ごとに区切る関数を作成しました。
「。」だけでなく、「♪」や「!」の場合も同様に以下の関数で可能としています。

“`py
def split_paragraph_into_sentences(paragraph, delimiters):
sentences = [paragraph]

for delimiter in delimiters:
sentences = [part + delimiter for sentence in sentences for part in sentence.split(delimiter)[:-1]] + [sentence.split(de

元記事を表示

久しぶりのターミナルでpythonを起動させる方法を忘れた。

①自分のmacでpythonを起動する際にpythonがインストールされているか確認する。

“`
$ python3 –version
Python 3.8.6
“`

②pythonを起動させる
“`
$ python 3.8.6
-bash: python: command not found
“`
あれ?
“`
$ python
-bash: python: command not found
“`
なんで?
“`
$ python -v
-bash: python: command not found
“`
ターミナルでpythonを起動させる方法を忘れてしまった。

# 対処

参考

【Python】インストールと起動(MacOS)

“`
$ python3
Python 3.8.6 (v3.8.6:db455296be, Sep 23 2020, 13:31:39)
[Clang 6.0 (clang-600.0.57)] on darwin
Type “help”, “copyright”, “c

元記事を表示

Vtuber Python3編

https://paiza.jp/works/mondai/query_primer/query_primer__vtuber

なかなか難しいですね。。。
自分の方針としては、memberに、メンバーシップの有無を0と1で表して、投げ銭分を合計で表して。。。みたいなことを考えたんですが、はじめて登録するメンバーはどうすれば?というところで詰まっちゃいましたね。。。

“`py
N = int(input())
members = {}
for _ in range(N):
A = input().split()
if A[1] == “give”:
members[A[0]] = (A[2],0)
else:
members[A[0]] = (0,1)

print(members)

“`

回答を見ると、メンバーシップ登録と、PowerChatはわけるということでした。
ただ、それ以外にもちょっと難しいところがあったので一つずつコメントしながら
作成します

“`py
N = int(input())

元記事を表示

[Colab] [Python3]機械学習により、日経平均株価を予測する方法

## 要 旨
Colabを使用して、機械学習により翌日の日経平均が上昇するか下落するかを予測するコードを記述します。
## 実施要領
colabにより、以下を記述します。
“`python3
#nikkei_predicted.py
#coding: UTF-8
#Pythonsのライブラリから日経平均10年分のデータを取得して予測するプログラム(1949.05.16からデータあり)
#前日から4日分のデータから翌日の株価を予測する
#直近300日間のデータを使用
#全データの前半75%を訓練に使用、直近25%でテスト実施。
import time
t1 = time.time()

from sklearn import svm
from pandas_datareader import data as web
import numpy as np
import pandas as pd
from pandas import Series, DataFrame
import csv
import datetime

n225 = web.DataReader(“NIKKEI225”

元記事を表示

macでpipをインストール

webスクレイピングをしたいのでpipをインストールする。
pythonのversion
“`
$ python3 –version
Python 3.8.6
“`

pipをダウンロードする。
“`
$ sudo easy_install pip
sudo: easy_install: command not found
“`
ダウンロードできない(泣)。

# 対処

参考

https://qiita.com/sho03/items/bafdf19592f6f9d71135

「get-pip.py」は事前にダウンロードしていたのでその後の作業をする。
“`
$ python3 get-pip.py

Successfully installed pip-24.0 wheel-0.43.0
“`

インストールに成功する。

“`
$ which pip
/Library/Frameworks/Python.framework/Versions/3.8/bin/pip
“`
pipがの場所を確認できたら終了!

元記事を表示

pip listにあるbeautifulsoup4とbs4の違い

Webスクレイピングをするさいにモジュールをインストール。
“`py
import requests
from bs4 import BeautifulSoup
“`

モジュールは一体どこからきたのかをコマンドプロンプトで探す。
“`
>pip list
beautifulsoup4 4.12.2
bs4 0.0.1
“`

beautifulsoupとbs4の違いはなに?

# 調べる
参考 

https://jobcode.jp/python-beautifulsoup4/

引用
どちらでもBeautifulSoup4が利用できますが、”pip install BeautifulSoup”の場合、古いバージョン(3)がインストールされ可能性があります。

BeautifulSoup4は、bs4ライブラリのモジュール(一部)であるためbs4でインストールすれば間違いはないです。

結論
bs4のなかにBeautifulSoup4が存在する。

元記事を表示

プログラム練習問題:経理

https://paiza.jp/works/mondai/query_primer/query_primer__accounting

ひとまず前回のと同様にしてみたのですが
どうしてもエラーが発生する。

“`py

N,K = map(int,input().split())
sections = {input() for _ in range(N)}
print(sections)
for _ in range(K):
section, number, cost = input().split()
print(section)
section, total_cost = sections[section]
sections[section] = (int(number), total_cost + int(cost))

print(sections)

“`

“`
Traceback (most recent call last):
File “Main.py”, line 5, in
secti

元記事を表示

ABC_347

全然ACならなくて10日間ほどブチ切れてました。
346は土曜日までに記事書くことにします。

### C問題

Dを(A+B)で割った余りがAの範囲にあればいいってことかな?

“`python

N , A , B = map(int,input().split())
D = list(map(int,input().split()))
count = True
for i in range(N):
if D[i] % (A+B) <= A: count = True else: count = False break print("Yes" if count else "No") ``` 結果WA 開始日を考慮してなかったです。そんな簡単なわけないじゃん youtubeの解説見たけど2周回して2分探索って?? これはお蔵入りで、、、(@^^)/~~~ ### D問題 ビット演算と全探索らしい。 ビット演算まだ履修してないんで土曜日までに電車の中でにらめっこします。 ```python def solve(

元記事を表示

それ,numpy で書かない?–9–

それ,numpy で書かない?–9–

ただでさえ遅い選択ソート。
**リストでやると Numpy ndarray でやるより 100 倍以上遅い**。argmin を使って余計な for ループも使わずに済む。

“`python
import random

# random.randint(1, 9)で1〜9の数値を生成、for文で80000回実行
numbers = [random.randint(1, 9) for _ in range(80000)]
“`

“`python
from time import time
def select_sort(data: list[int]) -> list[int]:
len_data = len(data) # 配列の長さ
for i in range(len_data): # リストの各位置に対して最小値を見つけ、その位置と交換するため
min_index = i # 初期値
for j in range(i + 1, len_data): # iより後ろの要素の中

元記事を表示

シンプルで分かりやすい選択ソートの解説 【Python3.12】

# 選択ソートとは
選択ソートは、シンプルで直感的に書けるソートアルゴリズムです。
実装が簡単なので、小さなデータをソートするのに適しています。
平均時間計算量、最悪時間計算量がともにО(n²)なので効率的ではありません。

## 配列(ハッシュテーブル)を作成
![スクリーンショット 2024-04-02 19.17.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3761690/502c306a-9cb9-d375-4321-490f88ec2cd6.png)
8個のデータを持つ配列があります。
Pythonだと以下のように宣言と初期化を行うことができます。
“`python
numbers = [7, 4, 3, 8, 1, 5, 2, 6]
“`
`random`モジュールを使うことでランダムな配列を作成することもできます。
“`python
import random

# random.randint(1, 9)で1〜9の数値を生成、for文で8回実行
numbers = [ra

元記事を表示

プログラミング練習問題「銀行」

https://paiza.jp/works/mondai/query_primer/query_primer__bank

ひとまず前回と同じようにタプルで配列を組んでみたのですが
どうやって配列から参照するかで詰まってしまいました。
時間も長くかかってしまったので回答を見ました。

“`py
N,K = map(int,input())
companies = [None] * N
for i in range(N):
name,password,bill = input().split()
companies[i] = (name,int(password),int(bill))

for _ in range(K):
name,password,bill = input().split()
if companies[name]
#ここで詰まる
“`

回答を見ると、タプルと辞書を組み合わせた感じで、
私はまだやったことがない方法でした。。。
勉強させてもらうということで、ちょっと自分なりにやってみました。

“`py
N

元記事を表示

Pythonでコマンドライン上の入力を受け取る方法(ド初心者用)

### 手順

##### モジュールインポート

https://docs.python.org/ja/3/library/sys.html

sysについてはこちらをご覧ください。

今回はsys.argvを使います。

sysを使うためにコードの最初に
import sysを記述しましょう

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1243082/4dedd91c-f288-c894-f9b3-190d5adaf544.png)

### コマンド上でのファイル実行

コマンドライン上で引数を受け取る準備をしましょう。

以下をご覧ください

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1243082/9ae057c4-764f-ba85-3521-136368107c17.png)

python3 sample.py input1 input2 input3

とあります

元記事を表示

【Python】indexメソッドを駆使してキーワードの置換を行う方法

# 概要

以下のようなテキストが連携されるプログラムがあるとします。

> text = “私は今新宿駅。1時間圏内に渋谷駅がある。また、同じ1時間圏内に横浜駅がある。”

ただし、たまに、一文切り落とされ(渋谷駅のパートが削られ)、以下のようにも連携されるとします。

> text2 = “私は今新宿駅。また、同じ1時間圏内に横浜駅がある。”

そんな場合に、「また、同じ」のみを削除するにはどうすればいいか?
ちょっと頭使ったので…以下に紹介します。

Pythonの`index`メソッドは、指定した要素がリストや文字列などのイテラブル(反復可能な)オブジェクト内で初めて出現する位置(インデックス)を返します。

以下公式ドキュメントです。

https://docs.python.org/ja/3/tutorial/datastructures.html

## サンプルコード

以下の関数により実現できました。

“`py
def replace_phrase_in_text(text, key_word, new_word):
if key_word in

元記事を表示

ABC165 E-Rotation Matching

自分の構築方法が公式解説やユーザ解説に載っていなかったので。

# 問題
https://atcoder.jp/contests/abc165/tasks/abc165_e

* $M$個の対戦場があり、それぞれに$2$つずつ相異なる数字を重複のないように割り振る
* $N$人にはあらかじめ$1$~$N$の番号が割り振られており、各ラウンドにおいて自分の番号と対戦場に割り振られた番号が一致すればそこへ行き、相手と対戦をする
* 各ラウンドの終了後に、それぞれに割り当てられた番号を$+1$する。但し$N+1$は$1$とする。(1-indexedで考える$\mathrm{mod} N$ のようなもの)
* この工程を$N$ラウンド繰り返したとき、どの$2$人も$2$回以上同じ組み合わせで対戦しないような$M$個の対戦場への数値の割り振り方を構築せよ

# 制約
* $1 \leq M$
* $2M+1 \leq N \leq 200000$

# 解説
前提として、$N$を固定したときにできるだけ$M$を大きくした方が全体の対戦数が増え同じ組み合わせでマッチするリスクが高まりそう。そこで、

元記事を表示

[Python] 導入・便利ツール紹介 [初学者向け] 2024年

![Python%E5%B0%8E%E5%85%A5%E8%A8%98%E4%BA%8B%E3%82%B5%E3%83%A0%E3%83%8D.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3682370/836ec3ad-2f95-68ec-2faa-6c131e673344.png)

## 概要

– Python 入門者であっても、わかりやすい内容でまとめる
– Python とは何か
– Python 導入 (ダウンロード) 方法
– Python 使用 / 便利ツールまとめ

## [ Python ] とは

– 1991年に初めて公開されたプログラム言語
– Google、Yahoo!、Instagram、Pinterest などのサービスも、2000年ごろから Python を採用している

### 導入方法

– Python ダウンロードページにアクセスする
– URL : [https://www.python.org/downloads/](https://www.p

元記事を表示

pyenvで導入したPythonでVRA-VANのバイト列を読み込むと日本語が文字化けする

# 概要
競馬予測AIを作るアプリケーションをPythonで作ろうとしていたらJupyterではうまくいっていたのに素のPythonに移したら文字化けが発生した
pyenvのshimsというものを通したPythonにアクセスしていたのが問題だった。
直接Pythonの本体にアクセスしたら解決した。

# 事象
もともと競馬予測AIを作る案件に参画していたところ、Jupyterでうまくいっていたのに、実際にバッチ化するにあたり素のPythonに変えたら日本語が無限に文字化けする事象に遭遇した。

構築はpywin32を使うためにpyenvでpython3.11.7-32bitを導入
そのまま`pyenv global 3.11.7`を設定した。

大まかにいうと下記のコードでJupyterではうまく動いていたので、素のPythonで写したところ、文字化けが発生するようになった。

想定される正常系は下記のように日本語が正常にパースするものだが、ここが@@@@のようになっていた。
似たような事象: https://note.com/mare_ism/n/n8840715b32a4
“`j

元記事を表示

OTHERカテゴリの最新記事