for循环中的比较运算符

时间:2014-02-10 22:57:57

标签: python for-loop python-3.x comparison

我的功能无法正常工作。当所有的行[0]都小于行[2]时,我一直得到'真'。我知道这非常简单,但这是我为了更好地理解文件和

而采取的练习
def contains_greater_than(filename):
    """
    (str) --> bool
    The text file of which <filename> is the name contains multiple lines.
    Each line consists of two integer numbers, separated by a space.
    This returns True iff in at least one of those lines, the first number 
    is larger than the   second one.

    """
    lines = open(filename).readlines()
    for line in lines:
        if line[0] > line[2]:
             return True
    return False

我的数据:

3 6
3 7
3 8
2 9
3 20

6 个答案:

答案 0 :(得分:4)

在我过度思考的前一个答案中接受过彻底的教育后,我是否可以提供这个更简单的解决方案,该解决方案仍然按照预期短路

for line in lines:
    x, y = line.split()
    if int(x) > int(y): return True
return False

答案 1 :(得分:1)

line[0] = "3" , line[1] = " "

表示数据中的所有情况('3'&lt;''= False)

你需要做

split_line = line.split()

然后

 numbers = [int(x) for x in split_line]

然后查看numbers[0]numbers[1]

答案 2 :(得分:1)

1)您正在比较需要转换为整数的字符串

2)你只会抓住第一个和第三个字符(因此,你不会得到20中的0)

改为使用

first, second = line.split()
if first < second:

答案 3 :(得分:1)

这是一个完整的功能重写。希望这是启发性的; - )

import functools

def line_iter(fname):
    with open(fname) as inf:
        for line in inf:
            line = line.strip()
            if line:
                yield line

def any_line(fn, fname):
    return any(fn(line) for line in line_iter(fname))

def is_greater_than(line):
    a,b = [int(i) for i in line]
    return a > b

contains_greater_than = functools.partial(any_line, is_greater_than)

答案 4 :(得分:0)

“3 20”是一个字符串,之前只做map(int,LINE.split())。 但是你想如何比较2个数字和2个数字?

答案 5 :(得分:0)

主要问题是你要比较线的字符,而不是每个字符的两个数字的值。这可以避免首先将行拆分为以空格分隔的单词,然后通过将int()函数应用于每个单词,将这些单词转换为整数值:

def contains_greater_than(filename):
    with open(filename) as inf:
        for line in inf:
            a, b = map(int, line.split())
            if a > b:
                return True
        return False

print(contains_greater_than('comparison_data.txt'))

这一切都可以在Python中使用内置的any()函数和generator expressions进行非常简洁的完成:

def contains_greater_than(filename):
    with open(filename) as inf:
        return any(a > b for a, b in (map(int, line.split()) for line in inf))