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']
在我的代码中我可以使用哪些函数来定义此列表中的第1个第2个第3个和第4个值以及下面将输出的所有值,即时尝试
allt[0][2] or
allt[i][2]
但是那个剂量给了我-72.84,这是一个错误,然后其他时候它列表没有属性拆分
更新,也许我需要使用枚举?我需要确保尽管可以使用中间2值,但是数字而不是字符串,因为我用数学减去它们
答案 0 :(得分: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]
答案 1 :(得分:0)
[]暗示一个列表。
''表示一个字符串。
allt = ['mw91 42.927 -72.84 2.8']
allt是一个包含字符串的列表:
allt [0] - > 'mw91 42.927 -72.84 2.8'
allt [0] [2] - > '9'
allt.split() - > ['mw91','42 .927',' - 72.84','2.8']
allt.split()[2] - > '-72.84'#这仍然是一个字符串。
float(allt.split()[2]) - > -72.84#这是一个漂浮物。
答案 2 :(得分: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)]