Python使用Tab从一个列表中删除两个列表
我有一份清单:Python使用Tab从一个列表中删除两个列表,python,python-3.x,list,split,python-2.x,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”之前有值,另一个在“/t”之后有值 但是,我只想从data[1]到len(data),跳过第一个值,因为它只是描述性文本 例如: L1
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”之前有值,另一个在“/t”之后有值
但是,我只想从data[1]到len(data),跳过第一个值,因为它只是描述性文本
例如:
L1 = [186.797,...,190.121]
L2 = [-48,..., 12]
您可以使用正则表达式:
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]))
输出:
[186.797, 187.272, 187.747, 188.222, 188.697, 189.172, 189.646, 190.121]
[-48, -48, -48, -45, -43, 6, -23, 12]
您可以使用正则表达式:
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]))
输出:
[186.797, 187.272, 187.747, 188.222, 188.697, 189.172, 189.646, 190.121]
[-48, -48, -48, -45, -43, 6, -23, 12]
一种简单、清晰的方法是使用列表理解,并描述您希望从何处获取所有数据。您可以使用
.split(“\t”)
将每个元素拆分为一个包含两个值的元组,并按选项卡进行拆分。然后使用float
和int
转换所需的元素
# 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]
一种简单、清晰的方法是使用列表理解,并描述您希望从何处获取所有数据。您可以使用
.split(“\t”)
将每个元素拆分为一个包含两个值的元组,并按选项卡进行拆分。然后使用float
和int
转换所需的元素
# 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]
使用列表理解并使用
.split()
编辑:如果您需要新列表中的数字值,请将这些值强制转换为float()
或int()
使用列表理解并使用
.split()
编辑:如果您需要新列表中的数字值,请将这些值强制转换为float()
或int()
这是一个未正确解析的TSV吗?我用来生成值的程序只是吐出数据。左边是波长,右边是时间。我只是不知道如何在python中将它分成两个列表,因为每个值的长度都不同。
L1,L2=zip(*(s.split('\t')表示数据中的s))
会让你达到目的……甚至,L1,L2=zip(*map(str.split,data))
这是一个解析不正确的TSV吗?我用来生成值的程序只是吐出数据。左边是波长,右边是时间。我只是不知道如何在python中将它分成两个列表,因为每个值的长度都不同。L1,L2=zip(*(s.split('\t')表示数据中的s))
会让你达到目的……甚至,L1,L2=zip(*map(str.split,data))
我想Brian希望输出是整数是的,他的问题没有任何引用我想Brian希望输出是整数是的,他的问题没有任何引用为什么需要所有正则表达式?@pstatix已经有一段时间了,但事后看来,我可能会使用str.split
或singere.split
。然而,re.findall
使生成的列更加容易zip
。为什么需要所有正则表达式?@pstatix已经有一段时间了,但事后看来,我可能会使用str.split
或singere.split
。但是,re.findall
使生成的列更容易zip
。