Python - 'type'对象不可订阅

时间:2015-10-30 16:45:59

标签: python python-3.x

所以我有这个代码,它取一个未排序的列表和两个整数,然后搜索,看看列表中的值是否高于其中一个整数而且低于另一个,每次运行它我得到“'类型'对象不可订阅”这对我来说完全没有意义,因为我是初学者...请帮忙。

def unsortedSearch(list1, i, u):
    found = False
    pos = 0
    pos2 = 0

    while pos < len(list1) and not found:
        if list[pos] < u :
            if list[pos2] > i:
                found = True
            pos2 = pos2 + 1
        pos = pos + 1
    return found

unsortedList = ['1', '3', '4', '2', '6', '9', '2', '1', '3', '7']
num1 = '3'
num2 = '5'

isItThere = unsortedSearch(unsortedList, num1, num2)

if isItThere:
    print ("There is a number between those values")
else:
    print ("There isn't a number between those values")

3 个答案:

答案 0 :(得分:0)

在函数Matcher m = Pattern.compile("(.*)<client>(.*)</client>(.*)").matcher("<client>12345abcde</client>"); m.matches(); String value = m.group(2); 中,您有一个名为unsortedSearch的参数,但在函数体中,您将其称为list1。因此,使用list更改所有list,您当前的问题将得到解决:

list1

答案 1 :(得分:0)

你使用list [] iso list1 []。 list是python中的一个类型,正如错误告诉你的那样,你不能订阅类型

接下来,你可以使用列表理解来使代码更具可读性

if [x for x in unsortedList if num1 < x < num2]:
    print("There is a number between those values")
else:
    print("There isn't a number between those values")

[] 之间的部分称为列表理解:基本上将返回每个if的列表,其中x在num1和num2之间。 因为Python中的空列表为false,(一起将为None,False,0和&#34;&#34;)您可以使用 if 快捷方式

答案 2 :(得分:0)

while pos < len(list1) and not found:
    if list[pos] < u :
        if list[pos2] > i:
            found = True
        pos2 = pos2 + 1
    pos = pos + 1

在if条件中使用'list'而不是'list1'。

修改算法:如果我理解得很好,你在i和u之间的列表中寻找一个值。那你为什么要定义pos和pos2?

你想检查我是否&lt; list1 [pos]&lt;如果没有,那么请转到列表中的下一个项目。

这应该足以让你编写代码:)