TypeError:不支持的操作数类型。如何找出lis中数字之间的最小差异

2024-05-28 18:18:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要找出列表中数字之间的最小差异。你知道吗

由于某些原因,当我在控制台中输入数字时,它不起作用,我得到这个错误TypeError: unsupported operand type(s) for -: 'str' and 'str'

def najmanja_razlika(): #smallest_diff
    a=input('unesite brojeve liste')
    b=len(a)
    razlika=10**20 #difference
        for i in range(b-1):
            for j in range(i+1,b):
                if int(abs(a[i]-a[j]))<razlika:
                razlika=abs(a[i]-a[j])
        return razlika
print(str(najmanja_razlika()))

当我运行这个时得到的是:

无硅锌锌锌合金板5,4,9,3

Traceback (most recent call last):
  File "C:/Users/Nina/PycharmProjects/klkOR/klk4.py", line 19, in <module>
    print(str(najmanja_razlika()))
  File "C:/Users/Nina/PycharmProjects/klkOR/klk4.py", line 11, in najmanja_razlika
    if int(abs(a[i]-a[j]))<razlika:


TypeError: unsupported operand type(s) for -: 'str' and 'str'

Tags: andinforiftyperange数字abs
2条回答

如果没有将字符串输入转换为int或float,则可能需要执行以下操作。你知道吗

def najmanja_razlika(): #smallest_diff
    a=[int(i) for i in input('unesite brojeve liste').split(',')]
    b=len(a)
    razlika=10**20 #difference
    for i in range(b-1):
        for j in range(i+1,b):
            if int(abs(a[i]-a[j]))<razlika:
                razlika=abs(a[i]-a[j])
    return razlika
print(str(najmanja_razlika()))

另外,请注意缩进在Python中很重要。你知道吗

这是我得到的结果:

unesite brojeve liste5,4,2,9,6
1

顺便说一句,如果先对向量排序,就可以将复杂性从O(n^2)降低到O(nlogn)。你知道吗

如果您安装了numpy,您可以使用它来有效地计算最小差异(它总是比纯Python循环快)。我还将使用json(标准库的一部分,不需要安装它)来解析输入字符串。你知道吗

import json
import numpy as np

def min_difference():
    input_string = '[' + input('Enter comma-separated numbers: ') + ']'
    a = np.array(json.loads(input_string))
    mask = ~np.eye(a.shape[0], dtype=bool)
    return np.abs(a[:, None] - a[None, :])[mask].min()

相关问题 更多 >

    热门问题