Python的两个列表来自一个列表的Tab

时间:2018-02-28 00:35:31

标签: python python-3.x list split python-2.x

我有一个清单:

data = ['Other stuff',186.797\t-48',
 '187.272\t-48',
 '187.747\t-48',
 '188.222\t-45',
 '188.697\t-43',
 '189.172\t6',
 '189.646\t-23',
 '190.121\t12',...]

如何在“/ t”之前创建两个带有值的列表,然后用另一个值创建另一个列表。

但是,我只想从数据[1]到len(数据)跳过第一个值,因为它只是描述性文本。

例如:

L1 = [186.797,...,190.121]
L2 = [-48,..., 12]

3 个答案:

答案 0 :(得分:2)

您可以使用正则表达式:

ACID

输出:

import re
s = ['186.797\t-48',
 '187.272\t-48',
 '187.747\t-48',
 '188.222\t-45',
 '188.697\t-43',
 '189.172\t6',
 '189.646\t-23',
 '190.121\t12']

L1, L2 = map(list, zip(*[[float(re.findall('[\d\.]+', i)[0]), int(re.findall('[\-\d]+$', i)[0])] for i in s]))

答案 1 :(得分:1)

一种简单明了的方法是使用列表理解并描述您希望从中获取所有数据的位置。您可以使用.split("\t")将每个元素分解为具有两个值的元组,由选项卡分割。然后使用floatint转换所需的元素。

# Iterate over the list and grab everything before the \t and convert to a float
L1 = [float(val.split("\t")[0]) for val in values]
#: [186.797, 187.272, 187.747, 188.222, 188.697, 189.172, 189.646, 190.121]

# Iterate over the list and grab everything after the \t and convert to an int
L2 = [int(val.split("\t")[1]) for val in values]
#: [-48, -48, -48, -45, -43, 6, -23, 12]

答案 2 :(得分:1)

使用列表推导并使用.split()

分隔值
l = ['186.797\t-48', '187.272\t-48', '187.747\t-48', '189.172\t6']

[x.split('\t')[0] for x in l]
['186.797', '187.272', '187.747', '189.172']

[x.split('\t')[1] for x in l]
['-48', '-48', '-48', '6']

修改:如果您的新列表中需要数字值,请将值转换为float()int()

l = ['186.797\t-48', '187.272\t-48', '187.747\t-48', '189.172\t6']

[float(x.split('\t')[0]) for x in l]
[186.797, 187.272, 187.747, 189.172]

[int(x.split('\t')[1]) for x in l]
[-48, -48, -48, 6]