0
allt = []
with open('towers1.txt','r') as f:   
    towers = [line.strip('\n') for line in f]
    for i in towers:
        allt.append(i.split('\t'))
    print allt [0]

现在我需要帮助,我正在输入此文本

mw91 42.927 -72.84 2.8
yu9x 42.615 -72.58 2.3
HB90 42.382 -72.679 2.4

当我输出我得到

['mw91 42.927 -72.84 2.8']

我的代码在哪里以及我可以使用哪些函数来定义此列表中的第一个、第二个、第三个和第四个值以及下面将输出的所有值,我正在尝试

allt[0][2] or 
allt[i][2] 

但是那个剂量给了我-72.84,它是一个错误,然后其他时候它去列表没有属性拆分

更新,也许我需要使用枚举?我需要确保虽然我输入的中间 2 个值可以使用,但可以使用数字而不是字符串,因为我用数学减去它们

4

3 回答 3

1

你确定那些是标签吗?您可以不为 split 指定任何参数,它会自动在空格上拆分(这意味着您也不必事先删除换行符)。我将您的样本复制到一个文件中并让它像这样工作:

allt = []
with open('towers1.txt','r') as f:   
   for line in f:
        allt.append(line.split())

>>>print allt[0]
['mw91', '42.927', '-72.84', '2.8']
>>>print allt[0][1]
'42.927'

脚注:如果你摆脱了你的第一个列表理解,你只需要迭代一次文件,这样会减少浪费。


刚刚看到您也需要帮助转换浮点值。假设line.split()正确拆分数据,类似以下的内容可能会起作用:

allt = []
with open('towers1.txt','r') as f:   
   for line in f:
         first, *_else = line.split() #Python3
         data = [first]
         float_nums = [float(x) for x in _else]
         data.extend(float_nums)
         allt.append(data)

>>>print allt[0]
['mw91', 42.927, -72.84, 2.8]

对于 Python2,将 替换first, *_else = line.split()为以下内容:

first, _else = line.split()[0], line.split()[1:]

最后(回应下面的评论),如果您想要一组特定值的列表,您将不得不再次迭代,这就是列表推导式可能有用的地方。如果您想要[2]中每个元素的索引值,allt则必须执行以下操作:

 >>> some_items = [item[2] for item in allt]
 >>> some_items
 [-72.84, -72.58, -72.679]
于 2013-08-04T22:08:04.843 回答
0

[] 表示一个列表。

'' 表示一个字符串。

allt = ['mw91 42.927 -72.84 2.8']

allt 是一个包含字符串的列表:

allt[0] --> 'mw91 42.927 -72.84 2.8'

全部[0][2] --> '9'

allt.split() --> ['mw91', '42.927', '-72.84', '2.8']

allt.split()[2] --> '-72.84' #这仍然是一个字符串。

float(allt.split()[2]) --> -72.84 #现在是一个浮点数。

于 2013-08-04T22:06:36.003 回答
0

我认为这也应该有效

with open('towers.txt', 'r') as f:
    allt = map(str.split, f)

如果你需要第一个之后的值是浮动的......

with open('towers.txt', 'r') as f:
    allt = [line[:1] + map(float, line[1:]) for line in map(str.split, f)]
于 2013-08-04T22:42:55.970 回答