读取文件并查看lst中的数字是否按数字顺序排列

时间:2014-11-04 01:54:44

标签: python

问我的问题:

在“神话中的所有生物”一书中,侏儒是善良的,有胡子的生物,而地精往往是专横和笨笨的。地精喜欢骚扰侏儒,让它们以三个为一组排列,按胡须的长度排列。具有不同物理高度的侏儒会改变他们的安排以混淆地精。因此,地精必须以厘米为单位实际测量胡须,看看是否每个人都按顺序排列。 你的任务是编写一个函数来帮助哥布林确定侏儒是否正确排列,从最短到最长的胡须或从最长到最短。输入将来自文件gnome.txt,该文件以包含单个整数N,0< 0的行开头。 N< 30,这是要处理的组数。在此之后是N行,每行包含三个不同的正整数小于100.对于每个组,一行表示" Ordered"或"无序"应该打印: 用法:

  
    
      

侏儒()       有序       无序       有序

    
  

gnome.txt内部

3

40 62 77

88 62 77

91 33 18

到目前为止我的代码

def gnome():
    infile = open('gnome.txt')
    firstline = infile.readline()
    for i in range (int(firstline)):
        gnomeList = infile.readline().split()
        intlist = []
        for str in gnomeList:
            intlist.append(int(str))
            if intlist[i] > intlist[i + 1]:
                print ('Unordered')

        else:
            print ('ordered')

错误即将

文件" C:/Users/cjakob/Desktop/homework6.py",第34行,在gnome中     如果intlist [i]> intlist [i + 1]: IndexError:列表索引超出范围

非常感谢你,我已经花了好几个小时

3 个答案:

答案 0 :(得分:0)

您对指数的含义感到困惑。您的索引i表示您需要处理的三个侏儒的的数量,而不是每个集合中的侏儒数。

由于您要检查最近添加的值是否大于之前添加的值,您只需将if语句更改为if intlist[-2] > intlist[-1]:即可。这个负索引在Python中表示从列表末尾开始倒数的元素n。 请注意,那么当列表中只有一个元素或者因为intlist[-2]不存在而引发异常时,您需要确保没有这样做!

享受Python:)

答案 1 :(得分:0)

def gnome(gnome_list):
    return gnome_list == sorted(gnome_list) or gnome_list == sorted(gnome_list, reverse=True)


if __name__ == '__main__':
    with open('gnome.txt', 'r') as f:
        for line in f:
            if gnome(line.split()):
                print('Ordered')
            else:
                print('Unordered')

这会将列表与自身的排序版本(升序和降序)进行比较,并返回布尔结果。

答案 2 :(得分:0)

其他方法:

f = open('gnome.txt').readlines()[1:]
def check(a):
        if sorted(a) == a:
            return True
for x in f:
    x=x.split()
    if check(x) == True:
        print " ".join(x),"Ordered"
    else:print " ".join(x),"Unordered"

输出:

40 62 77 Ordered
88 62 77 Unordered
91 33 18 Unordered

在上面的代码中,我有check函数获取列表,如果list == sorted(list),它将返回True,表示已订购。
对于大文件,请勿使用readlines