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

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

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

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Python 3.x

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

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

Q&A

解決済

3回答

2289閲覧

Python3.11.1:原因不明の 挙動不審を、何とかしたい。

Nouble1

総合スコア7

Visual Studio Code

Visual Studio Codeとは、Microsoft社が開発したマルチプラットフォーム対応のテキストエディタです。Visual Studioファミリーの一員でもあります。拡張性とカスタマイズ性が高く、テキストエディタでありながら、IDEと遜色ない機能を備えることができます。

Python 3.x

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

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

ArrayList

Java用のタグです。arrayListはListインターフェースを実装した、リサイズ可能な配列用クラスです。

0グッド

1クリップ

投稿2023/03/13 17:49

編集2023/04/12 12:05

実現したいこと

ぱっと見では、

あり得ないだろうかも 知れない、
もしかしたら Python開発者しか、
対処不可能かも 知れない、
挙動不振を 何とかしたい。

_

前提

・pythonで 配列データを、
_スライスして 再結合する、
_コーディングを しました。
_

環境、

ウィンドウズ11  22H2
Powershell     7.3.3
python       3.11×64bit Microsoft配布版
Visual Studio Code 1.76.1

_

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

※注:エラーメッセージは ありません。

・配列データが 確率的に、
_一部 欠損します、
_失われたり、失われなかったり、
_します。

・コード初見時 100%、
_誰もが 嘘を、
_疑うでしょう。

_

該当のソースコード

Python iround.py(参照受けルーチン。)

1import numpy as LAC 2 3def iround(lis: list, dimensyon: int = 0, istypeint: bool = True): 4 temp = (LAC.asarray(LAC.asarray((LAC.fabs((I := LAC.array(lis))) * (dimtemp := 10 ** 5 (0 - dimensyon + 1)) + 5) / 10, dtype=int), dtype=float) * LAC.sign(I)) / dimtemp * 10 6 return LAC.asarray(temp, dtype=int) if (dimensyon > -1) and istypeint else temp

Python リスト操作。

1# coding: UTF-8 2# python3.11 3 4from logging import StreamHandler, FileHandler, getLogger, DEBUG, INFO, ERROR, Formatter, WARNING, CRITICAL 5import pytest 6import traceback as TB 7import functools as FT 8import itertools as IT 9import math as MT 10import random as RA 11import numpy as LAC # List Array Control. 12import tqdm as PGR # Progress rate. 13from iround import iround 14import sys 15 16 17# Backtrace define section. 18ERRORformatter = Formatter( 19 " Alert I I %(levelname)s %(message)s %(asctime)s %(filename)s") 20formatter = Formatter( 21 "[%(levelname)s] %(asctime)s - %(message)s (%(filename)s)") 22logger = getLogger(__name__) 23 24nomalhandler = FileHandler("DEBUG.log") 25nomalhandler.setLevel(DEBUG) 26nomalhandler.setFormatter(formatter) 27 28WARNINGhandler = FileHandler("WARNING.log") 29WARNINGhandler.setLevel(WARNING) 30WARNINGhandler.setFormatter(formatter) 31 32terminalhandler = StreamHandler() 33terminalhandler.setLevel(ERROR) 34terminalhandler.setFormatter(ERRORformatter) 35 36logger.setLevel(DEBUG) 37logger.addHandler(nomalhandler) 38logger.addHandler(WARNINGhandler) 39logger.addHandler(terminalhandler) 40 41 42# Data definition section. 43recursionlimit = sys.getrecursionlimit() 44DisDataanomal = 0 45E_Recursivecount = 0 46Recursivemount = 3 47C_Recursivecount = 0 48C_Dataanomaly = 0 49P_Dataanomaly = 0 50 51# Unique random number routine. 52# Center-biased random number. 53def Cran(end: int, start: int = 1, Centralization: int = 3): 54 return iround([LAC.average(LAC.random.randint(start, end + 1, Centralization))])[0] 55# Combining Shuffle routine. 56 57 58def list_action(action_times: int = 3, Orderlist: list = list(range(1, 55 + 1))): 59 try: 60 assert isinstance(Orderlist, (LAC.ndarray, list)) and not (isinstance( 61 Orderlist[0], (LAC.ndarray, list))) 62 except AssertionError: 63 logger.debug(TB.format_exc) 64 Orderlistlen = len(Orderlist) 65 Spare_Orderlist = Orderlist 66 67# Random biased on one side. 68 def Eran2(end: int, start: int = 1): 69 temporary1 = RA.randint(start, min(end, 4 + start) + 1) 70 try: 71 assert temporary1 >= start 72 except AssertionError: 73 logger.debug(TB.format_exc) 74 logger.debug( 75 f"Eran ŗ l ُ픭 temporary1 = {temporary1}") 76 return Eran2(end) 77 except RecursionError: 78# E_Recursivecount += 1 79 logger.warning(TB.format_exc) 80 logger.warning( 81 f"Eran ōċA Ăяo 񐔂 {Recursivemount} 񕪑 ₵ ܂ ") 82 sys.setrecursionlimit( 83 sys.getrecursionlimit() + Recursivemount) 84 except MemoryError: 85 logger.error(TB.format_exc) 86 raise MemoryError 87 return temporary1 88 89# Overlap and integrate - routine. 90 def Merements(target: list, removalside: list): 91 temp1 = len(removalside) 92 if temp1 < 3: 93 target = removalside + target 94 removalside = [] 95 else: 96 temp2 = -Eran2(temp1) 97 target = removalside[len( 98 removalside) + temp2: len(removalside)] + target 99 removalside = removalside[: temp2] 100 return target, removalside 101 102 for J in range(action_times): 103 temp1 = Cran(len(Orderlist), Centralization=15) 104 temporary1 = Orderlist[:temp1] 105 temporary2 = Orderlist[temp1:] 106 temporary3 = [] 107 while (len(temporary1) > 0) and (len(temporary2) > 0): 108 temporary3, temporary1 = Merements(temporary3, temporary1) 109 temporary3, temporary2 = Merements(temporary3, temporary2) 110 Orderlist = temporary1 + temporary2 + temporary3 111 try: 112 assert Orderlistlen == len(Orderlist) 113 except AssertionError: 114 logger.warning(TB.format_exc) 115 logger.warning( 116 f"list_action Ńf [ ^ ُ픭 Orderlistlen = {len(Orderlist)}") 117 Orderlist = list_action(Orderlist=Spare_Orderlist) 118 except RecursionError: 119 logger.warning(TB.format_exc) 120 logger.warning( 121 f"list_action ōċA Ăяo 񐔂 {Recursivemount} 񕪑 ₵ ܂ ") 122 sys.setrecursionlimit( 123 sys.getrecursionlimit() + Recursivemount) 124 except MemoryError: 125 logger.error(TB.format_exc) 126 raise MemoryError 127 return Orderlist 128 129 130# Durability test routine. 131def Durabilitytest(plactics: int): 132 l = 0 133 for j in PGR.tqdm(range(plactics)): 134 l += (len(list_action()) != 55) + 0 135 print(f"{l} {l / plactics * 100}%") 136 137 138# main 139Durabilitytest(10 ** 7)

試したこと

データ欠損異常が、

以下の 範囲で、
集中して 発生している事を、
突き止めました。

def Merements(target: list, removalside: list): temp1 = len(removalside) if temp1 < 3: target = removalside + target removalside = [] else: temp2 = -Eran2(temp1) target = removalside[len( removalside) + temp2: len(removalside)] + target removalside = removalside[: temp2] return target, removalside for J in range(action_times): temp1 = Cran(len(Orderlist), Centralization=15) temporary1 = Orderlist[:temp1] temporary2 = Orderlist[temp1:] temporary3 = [] while (len(temporary1) > 0) and (len(temporary2) > 0): temporary3, temporary1 = Merements(temporary3, temporary1) temporary3, temporary2 = Merements(temporary3, temporary2) Orderlist = temporary1 + temporary2 + temporary3

しかし、

Merementsルーチン内で、
異常は 発生しませんでした。
_

詰り、

以下の 範囲内で、
データ欠損異常が 発生しているものと、
思われます。

for J in range(action_times): temp1 = Cran(len(Orderlist), Centralization=15) temporary1 = Orderlist[:temp1] temporary2 = Orderlist[temp1:] temporary3 = [] while (len(temporary1) > 0) and (len(temporary2) > 0): 処理、 Orderlist = temporary1 + temporary2 + temporary3

_

流石に、

此は 初任者では、
どうこうできる レベルを、
超えてそうな 気が、
しています、

ご教示を お願いします。
_

補足情報

実行すると、

大量の Warningを、
ファイルに 吐き出し始めます、
お気をつけを。

追記

なんだか、

酷い 虚実な、
誹り、誹謗中傷、悪態を、
つけられてますので、

どっちが 聞く、
耳を 持たないのか、
どっちが 迷惑行為を、
仕掛けているのか、

検証Coding提示によって、
明らかにしたいと 思います。
_
是非、

お手元で 検証を、
頂き、
原因究明に お役立て、
頂ければ 幸いです。

_
尚、

当然ですが 当該環境では、
ok以外の 結果は、
詰まり データ欠損は、
存在しませんでした。

_
Merementsルーチンは、

無問題である旨、
示したにも 関わらず、
他者の 仕業を、
軽軽しく 踏みにじり、

_
おまけに、

冒涜の限りを、
尽くす 姿勢には、
誰であろうと 看過できない、
事でしょう。

_
Merements検証ルーチン。

Python3.11.1

1j = 0 2k = 0 3Eran2 = lambda X: j 4def test(func): 5 pass 6 def wrap(*args, **kwargs): 7 a = [1, 2, 3, 4, 5, 6, 7] 8 master = [] 9 global k, j 10 for i in a: 11 master.append(a) 12 applicable = master 13 for j in range(-1, -7, -1): 14 temp1, temp2 = func([], applicable) 15 k += 0 if len(master) == len(temp1) + len(temp2) else 1 16 return 17 return wrap 18 19@test 20def Merements(target: list, removalside: list): 21 temp1 = len(removalside) 22 if temp1 < 3: 23 target = removalside + target 24 removalside = [] 25 else: 26 temp2 = -1 * Eran2(temp1) 27 target = removalside[len(removalside) + 28 temp2: len(removalside)] + target 29 removalside = removalside[: temp2] 30 return target, removalside 31 32print(str(k) if Merements([], []) else "ok")

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

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

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

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

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

TakaiY

2023/03/14 01:31

pythonにはコードの書き方についての規約(pep8)があり、ほとんどのコードがそれに沿って書かれています。提示のコードは、特に変数や関数名などの命名規則が沿っていないので読みにくいです。ご自分でだけ読み書きするものであればいいのかもしれませんが、規則には沿っていたほうが、他のコードを読むときなども楽だと思います。 numpyのaliasをLACとしていたりするのも同様です。 これはpep8にはありませんが、npとするのが一般的です。 文章が不必要なところで頻繁に改行されているのでとても読みにくいです。1つの段落は改行を入れずに書いた方がいいと思います。
Nouble1

2023/03/14 16:40

〉pythonにはコードの書き方についての それは、 私が 示した、 問題点に、 どの様に 関連するか、 説明が 必要でしょうね、 論点を すり替えるには、 妥当性が 必要でしょう、 しかも、 此の 文面は、 Visual Studiocordが、 ルールに 沿って、 整形した ものです。 〉1つの段落は改行を入れずに書いた方がいいと思います 日本語記載ルール、世界的記載ルール、 何方をも 無視した、 ご指摘は、 お控え 願いたいのですが、 如何でしょうか? 私は、 記載ルール違反を、 許容 致しませんし、 何といわれようと、 禁則違反に 沿う事は、 不可能です。 要するに、 何か 難癖付けたいから、 吐く 息すら、 批判する、 其れだけですよね?
Nouble1

2023/03/14 16:46

バグ修正は、 れっきとした プログラミング作業の、 一環です。 更に、 もしかしたら Pythonの、 バクかもしれない、 とても 公益性の、 高い 内容です。 又、 プログラミングと 無関係だという 立証も 一言たりとも、 現されていません。 故、 全く 正当性立証が、 みられないため、 唯の 言い掛かりと、 判定します、 此以上の 対応を、 省略させて 頂きます。 当たり前ですが、 誹り、誹謗中傷は、 実刑判決すら 出ている、 今や 犯罪です、 お控えを 願えませんか?
Nouble1

2023/03/18 02:50

意味不明。
Nouble1

2023/03/18 02:50

脅迫かなー?
Nouble1

2023/03/18 02:55

運営様、 此の事実無根が、 大半を 占める、 コメントを、 どうにかして 頂く、 事は 出来ないでしょうか? 目お世毀損罪、冒涜罪、 此等は れっきとした、 検挙実績を 伴う、 犯罪ですよね? _ 運営者様型には、 犯罪管理義務が プロパイダー規制法によって、 強いられて いませんでしたか?
Nouble1

2023/03/18 02:57

失礼、 目お世毀損罪、 → 名誉毀損罪、 済みません。
guest

回答3

0

問題が発生するとあったところをちょっと追っただけですが、以下のところが疑問です。
関数Merements 96行目以降

python

1 temp2 = -Eran2(temp1) 2 target = removalside[len( 3 removalside) + temp2: len(removalside)] + target 4 removalside = removalside[: temp2]

removalsideをtemp2で切り分けて targetに付けているのかと思うのですが、 target=の式の最初に len(removalside)があるので、このスライスは必ず空になります。

投稿2023/03/14 01:35

TakaiY

総合スコア12765

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

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

Nouble1

2023/03/14 17:03

乱数で、 其処は 切り出し量を、 調整して いますよね? しかも 前段で、 乱数が 発生するだろう、 範囲の 少量の場合は、 先立って 全割り当てを、 していますよね? 故に、 其の部位で、 申されるような事は 起こり得ませし、 〉トレースにより 無問題な事は、  確認されている、 とも、 意訳としては 記載していましたよね? あからさまにPythoncordや、 前段処理を 読めてませんよね? Pythoncordが 読めたなら、 あり得ない 指摘に、 なってませんか? 文法を、 全く 無視した、 日本語記載への 横やりと、 併せて、 貴方 立場が、 とても 不利です、 無問題だとした 部位や、 私自身に対する ストーキングな、 言い掛かり染みてますよ? 本当に 読まれましたか? お改め 頂けない、 ものですかね? 勿論、 迷惑行為、難癖付には、 対応を、 省略させて 頂いて、 構いませんか?
TakaiY

2023/03/15 01:07

なんだ、他人の意見を聞く気がないのであれば、質問なんかしなければいいのに。 ではこれにて失礼。
Nouble1

2023/03/15 14:29

抑も、 そんな 処理ではないし、 〉全てを 統合できている筈なのに、  データ欠損が、  出たり、出なかったりする、 という 問題点なのに、 》此では 全てが、  結合してしまう? マジで 言ってます? 推察可能範囲では、 ・悪意、 ・能力的問題、 ・ジョーク、 此れ等が 可能性として、 挙げられるでしょうが、 ジョークとしか 此では、 私は 取れませんよね? 冗談は 迷惑です、 辞めて 頂けませんか? それとも、 悪意なのか、能力問題なのですか? 違いますよね?
guest

0

自己解決

自己解決しました。

訂正と、お詫び、
Merementsルーチンで 添え字が、
-1になる 現象を、
確認しました、

但し -2以下にある場合には、
問題が 見られません、

又 此に、
対処した所、
ErrorLogは 取りました、

お世話になりました、
済みませんでした。

_
寸評、

リストの 添え字が、
マイナスでも、
Errorが 発起しないのは、
バグではないのか?

_
詰まり

此の 内容は、
やはり bug報告では、
なかったか?

投稿2023/05/07 23:28

編集2023/05/07 23:30
Nouble1

総合スコア7

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

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

0

ちゃんとした説明になってなかったのでイチから書き直しました。元の回答は編集履歴から確認してください。


関数Merement内のこの部分について:

python

1target = removalside[len(removalside) + temp2: len(removalside)] + target 2removalside = removalside[: temp2]

質問者様の意図を想像するに、長さNのリストarrと負の整数iがあったとき、

arr[: i]
arr[: N + i]と同じ結果になる前提で書かれたコードかと思いますが、
これは-2*N < i < -Nの範囲においては結果が異なります。

簡単な検証用コードを書きました。

python

1N=5 2arr = list(range(N)) 3for i in range(1, 3*N): 4 print(i, arr[:-i], arr[:N-i])

結果はこちらです

text

11 [0, 1, 2, 3] [0, 1, 2, 3] 22 [0, 1, 2] [0, 1, 2] 33 [0, 1] [0, 1] 44 [0] [0] 55 [] [] 66 [] [0, 1, 2, 3] 77 [] [0, 1, 2] 88 [] [0, 1] 99 [] [0] 1010 [] [] 1111 [] [] 1212 [] [] 1313 [] [] 1414 [] []

実例を見てみます。

Eran2がrandintの上限を返すときを考えます。上限はmin(end, 4 + start) + 1です。
つまり

python

1def Eran2(end: int, start: int = 1): 2 # temporary1 = random.randint(start, min(end, 4 + start) + 1) 3 temporary1 = min(end, 4 + start) + 1 4 return temporary1

このとき、以下のようなMerementsの検証用コードを動かすと、

python

1def Eran2(end: int, start: int = 1): 2 # temporary1 = random.randint(start, min(end, 4 + start) + 1) 3 temporary1 = min(end, 4 + start) + 1 4 return temporary1 5 6 7def Merements(target: list, removalside: list): 8 temp1 = len(removalside) 9 if temp1 < 3: 10 target = removalside + target 11 removalside = [] 12 else: 13 temp2 = -Eran2(temp1) 14 target = removalside[len( 15 removalside) + temp2: len(removalside)] + target 16 removalside = removalside[: temp2] 17 return target, removalside 18 19for i in range(10): 20 ys,xs = Merements([], list(range(i))) 21 print(i, xs, ys)

結果がこちら

text

10 [] [] 21 [] [0] 32 [] [0, 1] 43 [] [2] 54 [] [3] 65 [] [4] 76 [] [0, 1, 2, 3, 4, 5] 87 [0] [1, 2, 3, 4, 5, 6] 98 [0, 1] [2, 3, 4, 5, 6, 7] 109 [0, 1, 2] [3, 4, 5, 6, 7, 8]

i=3, 4, 5 のときに要素数が足りていないことがわかりました。

試しに、i=3のとき、すなわちMerements([], [0, 1, 2])で何が起きているのかを見てみます。
このときtemp2-4で、
len(removalside)3になります。
すると、
removalside[len(removalside) + temp2: len(removalside)]
removalside[3 - 4: 3]となり、[2]になります
一方でremovalside[: temp2][] になります。
なので[0, 1]が捨てられます。


投稿2023/03/16 03:12

編集2023/03/20 00:53
ozwk

総合スコア13521

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

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

Nouble1

2023/03/16 15:51

こう言っては 難ですから、 気を 使って、 千々籠もって しましそうです、 困ります。 __ あの、 cordを 確認、 頂けますか? そんな事は 起きないと、 思うのですよ? _ 気を使うなー、 困ってしまう、 randintの 最大側に、 xを 指定した場合、 創出される 最大値は、 x-1 ですよね? Pythonの 慣例通りですよね? 違ってますか? _ 当該最大値減少を、 埋めるための 態々の、 +1なのですよ? _ また、 トレースしていたら、 〉乱数出力値の 違いを、 表される前に お判りになった、 と 思うのですよね。 _ 詰まり、 〉本当に トレースしたの? とか、 色々 ありますが、 ご指定には 今回限りでは、 此以上は 触れないでおこうと、 思うのです、 其れって 平和ですよね? 何か 取り違えられた、 誰にでも あるような、 事な だけですよね? 敢えて 棹差す程の、 事でも ないのですよね? 普遍的な 事態ですよね? 違いますの?
ozwk

2023/03/17 04:41 編集

> randintの 最大側に、 > xを 指定した場合、 > > 創出される 最大値は、 > x-1 ですよね? > > Pythonの 慣例通りですよね? > 違ってますか? はい、違います。 randintの最大側にxを指定したときの最大値はx-1ではなくxです これはリファレンスに書いてあります。 https://docs.python.org/ja/3/library/random.html#random.randint 最大値を含まないのはrandrange 関数の方です。紛らわしいですよね!
Nouble1

2023/03/18 02:47

其れは 失礼しました、 済みません、 後で +1は、 省きましょう。 _ とは言え、 此また 言い難いいのですが、 最大値が 3、4、 何方でも 大差ないのですよ、 走らせたなら 解るでしょうが、 実際は 6が、 出得りますしね。 _ そして、 6発生時でも 欠損が、 起こるとは限らないのですよ、 詰まり 争点外なのです、 竿を 刺されない、 方向性を 望んでいたのですが。 _ ですからね、 走らせたのか 伺いたく、 なったのですよ。 _ ところで、 -4:と している時、 何故 [x.y,w]が、 捨てられるのでしょうか? GoogleColaboratoryでも 欠損は、 確認出来ませんでしたしね。 説明して 頂けますか? お手間を かけますね。
ozwk

2023/03/20 00:29

申し訳ありません、複数のトレース結果が混ざったのか単に書き間違えたのか とにかく意味がよく通らない回答になっていました。 もう少しシンプルな問題確認コードを元に回答を書き直しましたのでご確認ください
Nouble1

2023/03/20 22:31

ozwk様、 再三の お心砕きに、 感謝します。 では、 ご回答を お待ちすれば、 いいですか? 宜しく 願います。
ozwk

2023/03/20 23:28

回答を編集しました
Nouble1

2023/03/22 12:35

何を 如何、 変えたのですか?
Nouble1

2023/03/23 13:31

あの、 此以上の 不毛な、 貴方ご自身による 名誉毀損は、 辞めませんか? 此方としても 心苦しいのです。 其のルーチン内に、 先にも 示しました通り、 ご指摘の 症状は、 存在しないからです、 少なくとも ご指摘内で、 欠損は 発生しません、 bugは ありません。 何故、 こう 言いだすかを、 詳らかにすると、 貴方の 立場を、 完璧に なくしますので、 差し控えますが。 もう、 其の 方向性で、 棹を 刺すのは、 お辞めを 頂けませんか? 貴方の 顔を、 潰す 事は、 本意では ないのです、 此のまま 穏便に、 済ませませんか? 出来れば、 〉回答を 削除された、  方が いいか、 とすら 思います。 又、 ご意見を 変えられない限り、 貴方の 名誉保護のため、 ご対応 致しかねる場合がある、 事を、 予め ご了承を、 頂けましたなら 幸いです。
Nouble1

2023/04/02 16:53

再度 記載しておきますが、 其れでは  データは、 移動するだけで、 欠損は 起きません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問