按索引组合字符串列表中的元素

时间:2017-06-23 17:58:15

标签: python python-3.x reshape

我有一个像这样的字符串列表

 list1 =  ["['First Standard', 'First Flex', 'Business Standard']", "
    ['P,F', 'A', 'C,D,F,G']"]

我希望将其重新格式化为:

 list2 = ["['First Standard','P','F']", "['First Flex','A']", "['Business 
  Standard','C','D','F','G']"]

2 个答案:

答案 0 :(得分:1)

如果要处理相关数据的并行集合,zip函数很有用。

a=[1,2,3]
b=[4,5,6]
zip(a,b)
> [(1,4), (2,5), (3,6)]

此外,您可以ast.literal_eval从这些字符串中获取列表。

ast.literal_eval("[1,2,3]")
> [1,2,3]

将此应用于您的案例:

data = ["['First Standard', 'First Flex', 'Business Standard']", "['P,F', 'A', 'C,D,F,G']"]
result = [[x] + y.split(",") for (x,y) in zip(ast.literal_eval(data[0]),ast.literal_eval(data[1]))]

编辑:

您也可以将此数据视为有效的json并使用此功能。

import json
result = [[x] + y.split(",") for (x,y) in zip(json.loads(data[0]),json.loads(data[1]))]

答案 1 :(得分:1)

如果你想避免使用eval表达式(出于安全原因我强烈建议),你可以使用正则表达式来实现。如评论中所述,如果您的数据包含嵌套的单引号,则需要更改此内容。

#!/usr/bin/env python
#-*- coding: utf-8 -*-
import re

start_list = [
"['First Standard', 'First Flex', 'Business Standard']",
"['P,F', 'A', 'C,D,F,G']"
]

pattern = "'(.*?)'"

new_list = []
for stringsInList in start_list:
    words = re.findall(pattern, stringsInList)
    new_list.append(words)


final = [(a, b) for a, b in zip(new_list[0], new_list[1])]
print(final) 
#[('First Standard', 'P,F'), ('First Flex', 'A'), ('Business Standard', 'C,D,F,G')]

编辑 - 略微更精简

start_list = [
"['First Standard', 'First Flex', 'Business Standard']",
"['P,F', 'A', 'C,D,F,G']"
]

new_list = [re.findall("'(.*?)'", x) for x in start_list]
final = [(a, b) for a, b in zip(new_list[0], new_list[1])]

print(final)