@curry_pan (yy kk)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

【python】”<”をコード内に記入していないのにエラーが出てしまう【初心者】

解決したいこと

下のよう"<"は使えないよというエラーがありますがコード内には記入してません。
どうしてでしょうか?
また、何回か実行すると動くときもあります。なぜ?
importに関してはこの後もコードが続くので現状問題である部分まで記載させていただいております。

発生している問題・エラー

    v_min = min(judge_list)[0]
TypeError: '<' not supported between instances of 'int' and 'list'

該当するソースコード

from pandas.core.arrays.datetimes import validate_tz_from_dtype
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt


def over_timing(file_pass):
    df = pd.read_csv(file_pass, encoding="shift_jis", skiprows=70, skipfooter=3)

    N = len(df) 
    dt = (df.iloc[1,1] - df.iloc[0,1])*10**-3   
    judge_range = 60/dt
    judge_tilt = 0.0045 

    f = df.iloc[:, 2]

    judge_list = over_timing = []
    for i,v in enumerate(f):
        judge_list.append([v,i])

        if len(judge_list) > judge_range:
            del judge_list[0]

        if len(judge_list) >= judge_range:
            v_min = min(judge_list)[0]
            v_min_i = int(min(judge_list)[1])
            v_max = max(judge_list)[0]
            v_max_i = int(max(judge_list)[1])

            tilt = (v_max - v_min)/(v_max_i - v_min_i)
            print(tilt)
            
            if tilt > judge_tilt:
                over_timing.append(v_max_i)
    
    print(over_timing)

0 likes

3Answer

min関数を愚直に記述するとしたら

def min(iterable):
    ret = math.inf
    for value in iterable:
        if value < ret:
            ret = value
    return ret

です.内部で比較演算子<が使われます.ここで,int < listみたいな比較演算が発生したので,整数と配列間で比較不可のエラーが出ています.judge_listの内部を都度確認してデバッグしてください.

1Like

Comments

  1. @curry_pan

    Questioner

    おしゃっている通り、
    print(type(min(judge_list))[1])
    で確認したところ、list関数でした。
    内部処理に”<”が使われるのですね。とても勉強になりました。ありがとうございます。

judge_listに、
さらにリストがネストしている要素と、そうでない要素があるのでは?

下記は、同様のエラーが出る例です。

>>> list=[]
>>> list.append([1,2])
>>> list.append([3,4])
>>> list
[[1, 2], [3, 4]]
>>> min(list)
[1, 2]
>>> min(list)[0]
1
>>> list.append([[5,6],7])
>>> list
[[1, 2], [3, 4], [[5, 6], 7]]
>>> min(list)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: '<' not supported between instances of 'list' and 'int'
0Like

Comments

  1. @curry_pan

    Questioner

    ご返信いただきありがとうございます。
    ほかの方の助言もあり、解決することができました。
    今回は頂いたケースではなかったのですが、こういった状況でもエラーになるのですね。
    とても勉強になりました。ありがとうございます。

他の方も回答されてますが、intlistが混ざっています。

# これはOK
print(min(3, 2, 1))

# TypeError: '<' not supported between instances of 'int' and 'list'
print(min([3, 4], 2, 1))

#Excel+VBAでできない(やらない)理由がよくわかりませんが・・・

0Like

Your answer might help someone💌