Python3関連のことを調べてみた2023年02月06日

Python3関連のことを調べてみた2023年02月06日

【leetcode × Python】任意の英数字から隣り合う2つの文字が同じ型でないことを確認する

# はじめに

以前にも、leetcodeは使用したことがあったのですが、今回、2年ぶりぐらいに解いてみました。
その時は`Easyモード`ですら難しく何時間もかけて解いていました。
当時は、Hintと回答を見ながらやっと解ける感じでした。

そこで今回、久しぶりに`Easyモード`を解いてみることにしました。

# 目次

[1.実際に解いた問題](#1-実際に解いた問題)
[2.私が出した回答がこちら](#2-私が出した回答がこちら)
[3.リファクタリングしていく](#3-リファクタリングしていく)
[4.リファクタリング後のコード](#4-リファクタリング後のコード)
[5.最後に](#5-最後に)

# 1. 実際に解いた問題

leetcodeではランダムに問題が選択できるのですが、そこから`Easy`を選びました
今回解いた問題がこちらです。

https://leetcode.com/problems/reformat-the-string/description/

以下が問題を日本語訳したものです

“`
英数字の文字列sが与えられる(英数字の文字列とは、小文字の

元記事を表示

RollingHashクラスをPythonでつくった

## 例題

https://atcoder.jp/contests/abc284/tasks/abc284_f

https://yukicoder.me/problems/no/2204

## つくったコード

“`Python
“””ローリングハッシュ

文字列にハッシュをかけて1次元の数に置き換えます。
長い文字列でも、一致判定をO(1)くらいでできます。

・使い方
rh=RollingHash(S): インスタンス作成。 計算量: O(len(S))
rh.value(l,r): 半開区間[l,r)のハッシュ値を返します。 計算量: O(1)
rh.merged_string_value(section_list):
半開区間をたくさん入れたリストsection_listについて、
各区間の文字列を連結させてできる文字列のハッシュ値を返します。
計算量: O(len(section_list)) (そんなにやばくない)
rh.same(section_list1,section_list2):
2つの文字列が同じならTrueを、そう

元記事を表示

Python学習、残り日数計算

こんにちはkmdです。
今回はyoutube等で学習用として紹介されていた日数計算について挑戦してみました。

問題)
今年があと何日あるかを
本日の日付から算出して
「今年はあと何日」と
出力するプログラムを作る

“`
import datetime

nenmatsu = datetime.date(2023, 12, 31)
today = datetime.date.today()
hikaku = nenmatsu – today

print(‘今日は’, today)
print(‘今年は残り’, hikaku.days, ‘日です’)
“`

前回のじゃんけんに比べ非常に難易度を落としたのですが、やはりじゃんけんのプログラムは一番最初に行うには難易度が高かったと感じました。

実行結果は
“`
今日は 2023-02-05
今年は残り 329 日です
“`
まだできないのですが、todayのデータをリストか何かに格納してもっと美しく出力できると思いました。

前回の「初めてのPython、じゃんけんゲーム備忘録」でコードを見てくれた方がいたおかげで、修正してく

元記事を表示

ffmpegの処理中にtkinterのプログレスバーを表示させる

初投稿です.よろしくお願いします.

# やりたいこと
– pythonからffmpegを使って動画を処理したい.
– GUI化したい.
# GUIの内容
– ボタンを押すと処理が開始する.
– 処理中はtkinterのプログレスバー(不確定モード)のウインドウがポップアップされる.
– 処理が完了するとプログレスバーのウインドウが自動的に閉じる.

# NGな例その1
“`python
import os, subprocess
import tkinter as tk
from tkinter import ttk, messagebox

command = “ffmpeg hogehoge” # ffmpegの処理コマンド

def start():
progress = tk.Toplevel()
bar = ttk.Progressbar(progress,mode=’indeterminate’)
bar.pack()
bar.start()

subprocess.run(command, shell=True)

pr

元記事を表示

Djangoの開発で突如出てきた__eq__メソッドとは

## テーマ

私は普段Djangoを用いてCDPの開発を行っています。

そこで遭遇した`__eq__`メソッドについて調べたので備忘録として記載します。

## 環境

||バージョン|
|—|—|
|Django|3.1.1|
|Python|3.8|

※バージョン自体少し古めです。。。

## __eq__メソッドとは

`__eq__`メソッドとは、Pythonに標準で用意されている特殊メソッドのことです。

よく使用されるものは下記のようなものがあります。

– `__init__` → クラスの初期化に使用
– `__str__` → クラスオブジェクトを文字列で表示

上記の他にも多くの特殊メソッドが存在します。

では、`__eq__`はどういったメソッドなのでしょうか。

結論から言うと、**クラスオブジェクトを何によって等価であるとみなすかを設定するメソッド**です。

通常オブジェクトを比較する場合、下記のようにメモリアドレスから判断します。

“`py
class Person:
def __init__(self, first_name:

元記事を表示

Massive MIMO伝搬利得の局所性を確認するシミュレータ

# 0. はじめに
**Massive MIMO(mMIMO)は、移動体無線通信システムにおける周波数利用効率や電力効率の向上、セルに収容可能なユーザ数の増加などが期待される技術である。**
mMIMOによってセルに収容される複数ユーザの通信品質を高めるため、ユーザ間の信号干渉を補償する技術(干渉補償技術)として、LSやMMSEを用いたものからDeep Learningを用いたものまで様々提案されている[1]。
干渉補償技術は、基地局で利用されるmMIMOとユーザの間に構築される電波伝搬 (mMIMO Channel)の推定値を入力とする。**mMIMO Channelの特性を利用した干渉補償技術を開発することで、通信品質の劣化を抑えながらの計算コスト低減が期待される。**
**本稿では、文献[1]で指摘されるmMIMO Channelの特性、つまり、フーリエ変換されたMassive MIMO伝搬利得の局所性をパラメータを変えながら確認できるシミュレータ**を紹介する。

# 1. システムと伝搬モデル
システムと伝搬モデルを紹介する。

## 1.1 システム
下記は、文献[1]のF

元記事を表示

PythonでFastAPI+gunicornを使用しBasic認証をかけたAPIサーバを立てる

## 環境
Amazon Lightsail(LAMP)
以前別の用途で作ったのを再利用しただけなので、LAMPであることに特に意味はない

## uvicornでAPIサーバーを動かす

Basic認証をかけたかったので、[FastAPIでBasic認証 – Qiita](https://qiita.com/taumu/items/e448259a132bdbacf31c)の通りbasic_auth.pyを用意し、API部分を下記の通り実装
host=”0.0.0.0″を指定することでローカル以外でもアクセスできるようにしている

“`python:myserver.py
import uvicorn
from fastapi import FastAPI, Depends
from basic_auth import verify_from_api
from fastapi.responses import FileResponse

app = FastAPI()

@app.get(“/”)
async def root(_ = Depends(verify_from

元記事を表示

enumerate

### はじめに
leetcodeの問題を解いていて解けたものの計算量がO(n^2)になってしまいました。
解説にO(n)のものがあり、`enumerate`を使っていて感動したので残しておきます。

### enumerate
forループを使うとき引数にインテラブルオブジェクトを指定すると要素とindex番号を取得できる。

*インテラブルオブジェクトとは、forループを使って取り出すようなオブジェクトのこと。
リスト、辞書、タプル、文字列など

`enumerate`の使い方は以下。
“`python
nums = [1, 10, 100]
for i, num in enumerate(nums):
print(i, num)
“`
実行結果は
“`
0 1
1 10
2 100
“`

### 使った結果
使う前はfor文の中にfor文を入れてこんな感じになってました。
“`python
class Solution:
def twoSum(self, nums: List[int], target: int) -> List[int]:

元記事を表示

初めてのPython、じゃんけんゲーム

こんにちはkmdと申します。

初投稿になります。
タイトル通り今回はPythonで簡単なじゃんけんのプログラムを組みました。
私は普段ネットワークの畑にいるためプログラムについてほぼ全くの無知です…

自動化やRPAを最近職場で見ることがあり、私も興味を持ったためプログラミングへ挑戦することにしました。
Udemyで少し勉強して基本的な?もので書けたと思います。

今回はさわり程度でアルゴリズムを理解するのに苦労しました。

“`janken.py
import random

print(‘じゃんけんをします。 手を選んでね \n’)

global human
global com

def nyuryoku():
global human
human = int(input(‘1:グー 2:チョキ 3:パー \n —> ‘))
if human not in [1, 2, 3]:
print(‘1か2か3を入力してください’)
nyuryoku()
else:
janken()

def

元記事を表示

【AtCoder】ABC288 のA,B,C における Python解説

ABC 288のA,B,C 問題を解くために考えたこと、ACできるPython3(PyPy3)コードを紹介します。

この記事は @u2dayo さんの記事を参考にしています。見たことのない方はそちらもご覧ください。とても勉強になります。

また、問題の難易度を表す指標を [Atcoder Problems](https://kenkoooo.com/atcoder/#/table/tsuru1471) から引用しています。このサイトは勉強した問題を管理するのにとてもオススメです。

質問やご指摘はこちらまで
Twitter : [Waaa1471](https://twitter.com/Waaaa1471)

作者プロフィール
Atcoder :[緑 910](https://atcoder.jp/users/tsuru1471)
230204 現在

# 目次
[はじめに](#はじめに)
[A.Many A+B Problems](#amany-ab-problems)
[B.Qualification Contest](#bqualification-contest)
[C

元記事を表示

Python + Tkinter – 統計的な調査に要する標本サイズを算出するアプリ

Tkinter学習の一環で統計的な調査に必要なサンプル数を算出するアプリを作ってみました。「統計WEB」の母比率の区間推定における必要なサンプルサイズの解説ページを参考に制作しました。

https://bellcurve.jp/statistics/blog/14347.html

# コード

“`python

from tkinter import *
from tkinter import font
from scipy.stats import norm

#ウィンドウのタイトル+サイズ
window = Tk()
window.title(“標本サイズ計算機”)
window.minsize(width=600, height=450)
window.config(padx=50, pady=20)

myfont = font.Font(family=’Helvetica’, size=20, weight=’bold’)
myfont_result = font.Font(family=’Helvetica’, size=24, weight=’bold’)
myf

元記事を表示

【AtCoder】ABC157E 「 Simple String Queries 」Python解説

# E.Simple String Queries

[問題ページ](https://atcoder.jp/contests/abc157/tasks/abc157_e)

難易度 : 1443

# 考察

type1 は **一点更新**、type2は **区間取得** 問題です。したがって、このクエリを高速に処理するためには **Segment Tree** を利用するのが良さそうです。

あとは、区間に登場するアルファベットの種類をどうやって管理するかを考えます。これにはいくつかの手段があります。

## 解法➀ アルファベットごとにセグ木を持つ

欲張って全てのアルファベットについて同時に考えようとするから状況が難しくなっています。
それよりも、アルファベットごとに独立に考えるほうが簡単です。つまり、**区間 $[l,r)$ 内に対象のアルファベットが含まれるか(存在するか) を求めることにします。**

そのためにはアルファベットごとに管理仕分ける必要があるので、**26本のセグメントツリー**を作成します。

元記事を表示

Pythonのself

### はじめに
最近pythonを勉強していて出会ったselfが少し曖昧だったので少しまとめておく。

### クラスとは
オブジェクトを生成する型のようなもの。
以下のように使われる。
“`python:qiita.py
class className():
pass

instance = className()
“`

### selfとは
インスタンス自身のこと。
以下のように使われる。
“`python
class className():
def __init__(self, strA, strB):
self.strA = strA
self.strB = strB

instance = className(“hello”, “qiita”)
print(instance.strA)
print(instance.strB)
“`
このコードでいう`instance`が`self`なのではないかという認識。

### 注意点
これは面白いなと思ったのがpythonはクラス変数にもインスタンス変数にも値がある場合は

元記事を表示

DFS(深さ優先探索)でサイクル検出を考える【python実装】

## 有効サイクルとは

有効サイクルとは、下の図のように、例えばノード 0 から開始し、0 → 1 → 2 → 1 → 2 → 1 … というように 1 と 2 を何度も繰り返し周回するような形です。
s1

## サイクル検出 – 発想1

サイクルを検出するために、次のような手順を踏むことができます。

1. グラフをDFS(深さ優先探索)で探索(ノードのスタート地点は、`for`文を使って、`0`から`n`までを全探索する)
2. 訪れたノードを記録する(`visited[crr] = True`などとしておく)
3. 次の行き先ノードで、すでに訪れていれば(`visited[nxt] = True`)、サイクルと判定します。

この手順を踏めば、大体うまく行きそうです。

**コードのざっくりとした

元記事を表示

Python 初学者が買い物リスト作成アプリを作った(データ収集編:1)

買い物リスト作成アプリを作るにあたって、

様々なレシピの材料と量を大量に集める必要があります。

買い物リスト作成アプリの概要はこちら

https://qiita.com/yuuauuy1/items/5bb4a53ab15bde354297

**★このページは以下項目で構成されています★**

| 項番 | ページ内リンク |
|:—-:|:————-|
| 1 | [データのイメージ](データのイメージ) |
| 2 | [データ収集で学んだこと](データ収集で学んだこと) |
| 3 | [データ取得の流れ](データ取得の流れ) |
| 4 | [楽天レシピのAPIを使って人気レシピを約2000件取得する](楽天レシピのAPIを使って人気レシピを約2000件取得する) |
| 5 | [楽天レシピのレシピカテゴリ一覧を取得する](楽天レシピのレシピカテゴリ一覧を取得する) |
| 6 | [レシピ名・レシピURL・レシピの材料一覧を取得する](レシピ名・レシピURL・レシピの材料一覧を取得する) |

# データのイメージ

Excel をデータ

元記事を表示

DeepLearningコード(Pytorch)

# はじめに
大学院を卒業したら,AIの研究職に…
いかないので,何年後かに見ても思い出せるようにコードを置いておきます.

自分のためなんだからね…!!
ガチで自分のメモ帳的な意味合いが強いので,解説なし&汚ねぇままです.
気が向いたらちゃんとするかもね~

# DNN(Base)
基本的な部分はDNNで書きます.
CNN・RNN・Segmentationはそれぞれ変化がある部分だけ載せます.

必要なライブラリをimportします.
pipなりcondaなりで環境にインストールしておいてください.
これら2つはどっちかに統一してください.混同すると環境壊れるこもがあるらしいっす:cry:
俺はpip派です:v:
~~~
import os
import cv2
import random
import numpy as np

import torch
import torch.nn as nn
import torch.nn.functional as F
import torch.optim as optim
import torchvision
import torchvi

元記事を表示

【Python】gradioで任意のHTML要素を作りたいときはgr.HTMLではなくgr.Markdownを使う?

# 概要
gradioで独自のhtmlを書きたいときに、gr.HTMLがなぜか機能せず、代わりにgr.Markdownを使ってなんとかしたという備忘録です。
gradioに入門したばかりなので、なにか初歩的な勘違い・ミスをしていたらすみません。

# 環境

macOSで実行し、Chromeで閲覧しました。

“`
% sw_vers
ProductName: macOS
ProductVersion: 12.4
BuildVersion: 21F79
% /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome –version
Google Chrome 109.0.5414.119
% python -V
Python 3.10.2
% pip list | grep gradio
gradio 3.16.2
“`

# 経緯
gradioがとても簡単なのでなるべくgradioでアプリを作りたかったのですが、一部、gradioのコンポーネントでは対応できない

元記事を表示

気象データを Python でスクレイピングする方法(10分値データ)

# きっかけ

気象データを取得したいと思い気象庁のサイトにアクセスしたところ、なぜかエラーになりCSVダウンロードができませんでした。

Web上での表示は問題無くできますので、この表データをCSV化できないかを考えました。

https://www.data.jma.go.jp/gmd/risk/obsdl/index.php

# すでにやられていたこと

調べてみると、気象データのスクレイピングは様々な方がチャレンジされていました。
なかでも、こちらの記事のソースコードをそのまま実行すれば私の環境でも動きました。
非常に助かりました。

https://www.gis-py.com/entry/scraping-weather-data

ちなみに、Pythonでは、BeautifulSoupというライブラリを使うのが定石のようです。
このようなコマンドでインストールできます。

“`pip3 install beautifulsoup4“`

# 今回試したこと

前述のブログでは1時間値を取得していましたので、10分値のデータを取得できるようにコードを変更してみました

元記事を表示

Kaggleで使える技術まとめ

# はじめに
Kaggleで学んだ処理方法をメモしていきます.
みなさんからも是非色々教えて欲しいです.

私が読んだ本をあげておきます.
– Pythonではじめる Kaggleスタートブック
– 前処理大全[データ分析のためのSQL/R/Python実践テクニック]

# 1 共通事項
## 1.1 バギング(bootstrap aggregating)
DeepLearningの研究では,手元にあるデータは全て正解もセットであることが多いと思います.
ですが,Kaggleはtestデータの正解ラベルは公開されていませんし,testデータに対する結果で競います.手元にあるデータをTrain・Validation・testに分けるのがセオリーですが,KaggleではTrain・Validationだけに分けて,できる限り多くのデータを学習させるようにします.その中からTrain・Validationの組み合わせを変更して複数のモデルを作成します.それらのモデル全てでテストデータに対して出力を取り,多数決を取って最終的なモデルの出力とします.
![Bagging.png](https:

元記事を表示

【Python】競プロ用様々な入力の受け取り方まとめ

# はじめに
調べて分かったものもあれば自分で考え出したものもあります。
より短い書き方などあったら教えていただけると幸いです。
新しい入力形式があったら随時追加予定です
# 数値(整数)
## 1文字の整数
### 入力例
“`
2
“`
### 受け取り方
“`py
N = int(input())
“`
## 2文字以上の整数(別変数として受け取る)
### 入力例
“`
2 3
“`
### 受け取り方
“`py
N, M = map(int, input().split())
“`
受け取りたい値の個数に左辺の文字数を合わせる
## 配列1つ
### 入力例
“`
2 3 5
“`
### 受け取り方
“`py
A = [int(x) for x in input().split()]
# or
A = list(map(int, input().split()))
# or
A = [*map(int, input().split())]
“`
## N行2次元配列→1つの変数
### 入力例
“`
1 2 3 4
5 6 7 8
9 10 11

元記事を表示

OTHERカテゴリの最新記事