Python 连接不同数量的列表元素

Python 连接不同数量的列表元素,python,regex,list,split,Python,Regex,List,Split,我有以下字符串列表: data = ['1 General Electric (GE) 24581660 $18.19 0.04 0.22 ', '2 Qudian ADR (QD) 24227349 12.22 -3.93 -24.33 ', '3 Square Cl A (SQ) 16233308 48.86 0.05 0.10 ', '4 Teva Pharmaceutical Industries ADR (TEVA) 15

我有以下字符串列表:

data = ['1 General Electric (GE)   24581660 $18.19 0.04 0.22 ',
        '2 Qudian ADR (QD)   24227349 12.22 -3.93 -24.33 ',
        '3 Square Cl A (SQ)   16233308 48.86 0.05 0.10 ',
        '4 Teva Pharmaceutical Industries ADR (TEVA)   15830425 13.70 0.22 1.63 ',
        '5 Vale ADR (VALE)   14768221 10.98 0.21 1.95 ',
        '6 Bank of America (BAC)   13938799 26.59 -0.07 -0.26 ',
        '7 Entercom Communications Cl A (ETM)   13087209 12.00 0.10 0.84 ',
        '8 Chesapeake Energy (CHK)   12948648 3.92 -0.05 -1.26 ',
        "9 Macy's (M)   12684478 21.07 0.44 2.13 "]
其中,每个字符串的格式为:计数、股票名称、体积、其他一些int值

我需要将这些字符串拆分为一个列表,其中每个元素都是上面字符串格式中的一个项目,我就是这样尝试的:

for i in range(1, len(data)-1):
    split = data[i].split()
    temp = "{} {} {}".format(split[1], split[2], split[3])
    del split[2 : 4]
    split[1] = temp
    print(split)
然而,我认为这是低效的,当名字超过或少于两个单词时,它就不起作用了。我该怎么处理?我是否需要首先调整生成字符串(数据)列表的方式

编辑:


可以按字符拆分列表

原始数据列表中的所有字符串都有两个部分,一个是股票名称,另一个是数字值,如果在字符串中拆分,可以将其拆分为包含股票名称字符串和数字字符串的列表,数字之间有一个空格的一致间距,然后可以在空格字符上拆分数字列表


您可以按字符拆分列表

原始数据列表中的所有字符串都有两个部分,一个是股票名称,另一个是数字值,如果在字符串中拆分,可以将其拆分为包含股票名称字符串和数字字符串的列表,数字之间有一个空格的一致间距,然后可以在空格字符上拆分数字列表


您可以使用
re.split

import re
data = ['1 General Electric (GE)   24581660 $18.19 0.04 0.22 ', '2 Qudian ADR (QD)   24227349 12.22 -3.93 -24.33 ', '3 Square Cl A (SQ)   16233308 48.86 0.05 0.10 ', '4 Teva Pharmaceutical Industries ADR (TEVA)   15830425 13.70 0.22 1.63 ', '5 Vale ADR (VALE)   14768221 10.98 0.21 1.95 ', '6 Bank of America (BAC)   13938799 26.59 -0.07 -0.26 ', '7 Entercom Communications Cl A (ETM)   13087209 12.00 0.10 0.84 ', '8 Chesapeake Energy (CHK)   12948648 3.92 -0.05 -1.26 ', "9 Macy's (M)   12684478 21.07 0.44 2.13 "]
final_data = [re.split('(?<=[a-zA-Z])\s+(?=\()|(?<=\))\s+|(?<=[\d\$-])\s+(?=[\d\$-])|(?<=\d)\s+(?=[a-zA-Z])', i) for i in data]
删除括号后:

final_data = [[b[1:-1] if b.startswith('(') and b.endswith(')') else b for b in i] for i in final_data]
输出:

[['1', 'General Electric', '(GE)', '24581660', '$18.19', '0.04', '0.22 '], ['2', 'Qudian ADR', '(QD)', '24227349', '12.22', '-3.93', '-24.33 '], ['3', 'Square Cl A', '(SQ)', '16233308', '48.86', '0.05', '0.10 '], ['4', 'Teva Pharmaceutical Industries ADR', '(TEVA)', '15830425', '13.70', '0.22', '1.63 '], ['5', 'Vale ADR', '(VALE)', '14768221', '10.98', '0.21', '1.95 '], ['6', 'Bank of America', '(BAC)', '13938799', '26.59', '-0.07', '-0.26 '], ['7', 'Entercom Communications Cl A', '(ETM)', '13087209', '12.00', '0.10', '0.84 '], ['8', 'Chesapeake Energy', '(CHK)', '12948648', '3.92', '-0.05', '-1.26 '], ['9', "Macy's", '(M)', '12684478', '21.07', '0.44', '2.13 ']]
[['1', 'General Electric', 'GE', '24581660', '$18.19', '0.04', '0.22 '], ['2', 'Qudian ADR', 'QD', '24227349', '12.22', '-3.93', '-24.33 '], ['3', 'Square Cl A', 'SQ', '16233308', '48.86', '0.05', '0.10 '], ['4', 'Teva Pharmaceutical Industries ADR', 'TEVA', '15830425', '13.70', '0.22', '1.63 '], ['5', 'Vale ADR', 'VALE', '14768221', '10.98', '0.21', '1.95 '], ['6', 'Bank of America', 'BAC', '13938799', '26.59', '-0.07', '-0.26 '], ['7', 'Entercom Communications Cl A', 'ETM', '13087209', '12.00', '0.10', '0.84 '], ['8', 'Chesapeake Energy', 'CHK', '12948648', '3.92', '-0.05', '-1.26 '], ['9', "Macy's", 'M', '12684478', '21.07', '0.44', '2.13 ']]

您可以使用
re.split

import re
data = ['1 General Electric (GE)   24581660 $18.19 0.04 0.22 ', '2 Qudian ADR (QD)   24227349 12.22 -3.93 -24.33 ', '3 Square Cl A (SQ)   16233308 48.86 0.05 0.10 ', '4 Teva Pharmaceutical Industries ADR (TEVA)   15830425 13.70 0.22 1.63 ', '5 Vale ADR (VALE)   14768221 10.98 0.21 1.95 ', '6 Bank of America (BAC)   13938799 26.59 -0.07 -0.26 ', '7 Entercom Communications Cl A (ETM)   13087209 12.00 0.10 0.84 ', '8 Chesapeake Energy (CHK)   12948648 3.92 -0.05 -1.26 ', "9 Macy's (M)   12684478 21.07 0.44 2.13 "]
final_data = [re.split('(?<=[a-zA-Z])\s+(?=\()|(?<=\))\s+|(?<=[\d\$-])\s+(?=[\d\$-])|(?<=\d)\s+(?=[a-zA-Z])', i) for i in data]
删除括号后:

final_data = [[b[1:-1] if b.startswith('(') and b.endswith(')') else b for b in i] for i in final_data]
输出:

[['1', 'General Electric', '(GE)', '24581660', '$18.19', '0.04', '0.22 '], ['2', 'Qudian ADR', '(QD)', '24227349', '12.22', '-3.93', '-24.33 '], ['3', 'Square Cl A', '(SQ)', '16233308', '48.86', '0.05', '0.10 '], ['4', 'Teva Pharmaceutical Industries ADR', '(TEVA)', '15830425', '13.70', '0.22', '1.63 '], ['5', 'Vale ADR', '(VALE)', '14768221', '10.98', '0.21', '1.95 '], ['6', 'Bank of America', '(BAC)', '13938799', '26.59', '-0.07', '-0.26 '], ['7', 'Entercom Communications Cl A', '(ETM)', '13087209', '12.00', '0.10', '0.84 '], ['8', 'Chesapeake Energy', '(CHK)', '12948648', '3.92', '-0.05', '-1.26 '], ['9', "Macy's", '(M)', '12684478', '21.07', '0.44', '2.13 ']]
[['1', 'General Electric', 'GE', '24581660', '$18.19', '0.04', '0.22 '], ['2', 'Qudian ADR', 'QD', '24227349', '12.22', '-3.93', '-24.33 '], ['3', 'Square Cl A', 'SQ', '16233308', '48.86', '0.05', '0.10 '], ['4', 'Teva Pharmaceutical Industries ADR', 'TEVA', '15830425', '13.70', '0.22', '1.63 '], ['5', 'Vale ADR', 'VALE', '14768221', '10.98', '0.21', '1.95 '], ['6', 'Bank of America', 'BAC', '13938799', '26.59', '-0.07', '-0.26 '], ['7', 'Entercom Communications Cl A', 'ETM', '13087209', '12.00', '0.10', '0.84 '], ['8', 'Chesapeake Energy', 'CHK', '12948648', '3.92', '-0.05', '-1.26 '], ['9', "Macy's", 'M', '12684478', '21.07', '0.44', '2.13 ']]

正则表达式从来都不是我的强项,但我需要计数(第一个数字),作为它自己在最终数据中的字符串。我是否必须添加[0-9][0-9]?到正则表达式的开头,这样计数就不会与股票的名称分开?我遗漏了什么吗?我更新了我的帖子,尝试对数据中的第一个字符串重新进行拆分,它只是创建了一个空字符串列表lists@Muffinman在运行
[i[:-1]+[i[-1][:-1]]for i in final_data]
之前,您能否发布
最终_数据的结果?早期的研究结果应该会对这个问题有所启发。即使是陌生人,他们:[[[1'1'],['1'],['1'],['1'],['1'],早期的结果应该对这个问题有帮助。更早的结果应该对这个问题有帮助。即使是陌生人,甚至陌生人:[[[1'1'],[[[1'1'1'],['1'1'],['1',['1',['1',['1',['1',['1',['1',[,[,[,[,[''他们他们,,['他们他们,,[,['''他们他们,,,,[''他们他们,,,['他们他们,,,['他们他们,,[''他们他们,,,['他们他们,,[''他们他们他们,,,,['他们他们,['他们他们他们,['他们他们,,['他们,['0']、[']、[']、['1']、['8']、['.]、['1'],['9'], [' '], ['0'], ['.'], ['0'], ['4'], [' '], ['0'], ['.'], ['2'], ['2'], [' ']]@Muffinman您如何准确格式化
数据
?当我在
数据
上运行我的帖子中的代码时,它工作正常。就在您在
数据
上运行正则表达式之前,
数据
看起来像什么?正则表达式从来都不是我的强项,但我需要计数(第一个数字),作为最终_数据中自己的字符串。我是否必须添加[0-9][0-9]?到正则表达式的开头,这样计数就不会与股票名称分开?我是否遗漏了什么?我更新了我的帖子,尝试重新拆分数据中的第一个字符串,它只是创建了一个空列表lists@Muffinman在运行
[i[:-1]+[i[-1][:-1]]之前,您可以发布
最终数据的结果吗早期的结果应该会对这一问题有所启发。甚至陌生人,甚至陌生人:[[1'],['',['',“,,'G'],['e'],['e'],['e'我在最后的我在最后的数据中为我在最后的我在最后的我在最后的数据中为我在最后的我在最后的我在最后的数据中为我在最后的数据]/code>>>>>?早期的结果应该会?早期的结果应该对这一个问题提供这一个问题。早期的结果应该对这一个问题有所启发。早期的结果应该对这一个问题。早期的结果应该对这一个问题。即使陌生人。即使陌生人。甚至陌生人,甚至陌生人,甚至陌生人,甚至陌生人,甚至陌生人,甚至陌生人:甚至陌生人:甚至陌生人:甚至陌生人:甚至陌生人:陌生人:[[[[[[[[[[[[[[[[[[[[[[[[[[[[[[1'1'1''6']、['6']、['0']、['']、['']、“$”],['1'],['8'],['1'],['9'],[''],[''],[''0'],['0'],['4'],['],['],['.],['2'],['''.],[''''''.[''']],[''''''''.].['1'],['9'],['9'],['''],['],['''],[''],['''''],[''''],[''''],[''''''''''],['],[''.['.[']@Muffinman@Muffinman?