【问题标题】:Select element not in list选择不在列表中的元素
【发布时间】:2016-08-10 10:33:32
【问题描述】:

我了解人们通常如何选择不在列表中的元素。但是,使用我的代码,该方法似乎不起作用。

所以我有一个包含以下数据的文本文件: 最小值:5,6,1 最大:5,6,1 平均:5,6,1

我只想从文件中选择数字并从中创建一个列表。我试过按类型来做,但这不起作用,因为列表中的所有元素都算作字符串。

所以我整理了以下代码:

inFile_test = open('in_test.txt','r')
while True:
    lines = inFile_test.readlines()
    for line in lines:
        words = [lines[0][0:3] , lines[1][0:3] , lines[2][0:3]]
        print str(words)
        values = []
        for element in lines:
            if element not in words:
                values.append(element)
            print str(values)

    else:
        break

我得到以下输出:

['Min', 'Max', 'Avg']
['Min: 5,6,1\n']
['Min: 5,6,1\n', 'Max: 5,6,1\n']
['Min: 5,6,1\n', 'Max: 5,6,1\n', 'Avg: 5,6,1']

我感觉我的列表结构有问题,导致代码无法正常运行,但我不确定是什么问题。

如果不是这样,我们将不胜感激有关仅从我的文本文件中选择数字的更好方法的建议。

【问题讨论】:

  • 您想要输出什么?

标签: python list python-2.7 for-loop sublist


【解决方案1】:

坦率地说,你的代码是一团糟。为什么要将逻辑包装在 while 循环中?无论如何它都会在第一次迭代后终止。

使用file.read 代替readlines 进行简化:

with open('in_test.txt') as f:
    data = f.read()

然后,只需执行以下操作:

>>> data
'Min: 5,6,1 Max: 5,6,1 Avg: 5,6,1'
>>> [int(c) for c in data if c.isdigit()]
[5, 6, 1, 5, 6, 1, 5, 6, 1]

【讨论】:

    【解决方案2】:

    你可以使用熊猫

    import pandas as pd
    df = pd.read_csv('in_test.txt',sep=r":|,",header=None,index_col=0).T
    

    如果你想逐行阅读

    with open('in_test.txt','r') as inFile_test:
        for line in inFile_test:
            word,numbers = line.split(":")
            numbers_as_float = [float(num) for num in numbers.split(",")]
            print(word,numbers_as_float)
    

    【讨论】:

    • 使用with 块来确保您的文件关闭,而不是try ... except
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-23
    • 2022-08-19
    • 1970-01-01
    相关资源
    最近更新 更多