如何将字符串中的行列表转换为列表列表,并删除行中的每个项目

时间:2017-06-07 16:45:48

标签: python

我想将字符串中的行列表转换为列表列表,并删除行中的每个项目。

以下作品,但我怀疑有更简洁的方法可以做到这一点。

def str_to_lst_of_lsts(s):
    lst = s.splitlines()[1:]
    lst2 = [i.split(';') for i in lst]
    lst3 = []
    for i in lst2:
        i2 = [j.strip() for j in i]
        lst3.append(i2)
    return lst3

s = '''
c; German for dog; Hund
c; capital of France; Paris
c; company; IBM
c; nation; Sweden
c; nickname for James; Jim
'''

print(str_to_lst_of_lsts(s))

# [['c', 'German for dog', 'Hund'], ['c', 'capital of France', 'Paris'], ['c', 'company', 'IBM'], ['c', 'nation', 'Sweden'], ['c', 'nickname for James', 'Jim']]

3 个答案:

答案 0 :(得分:1)

主要步骤是使用列表推导代替循环:

lst3 = [[j.strip() for j in i] for i in lst2]

是的,您可以嵌套列表推导。现在如果你坚持使用单线解决方案,你可以将之前的两个理解替换为这个理解。

编码风格:不要这样做。 : - )

答案 1 :(得分:0)

您可以使用嵌套字符串理解

def str_to_lst_of_lsts(s):
    return [
        [part.strip() for part in line.split(';')]
        for line in s.splitlines()[1:]
    ]

答案 2 :(得分:0)

这也可以 -

p = s.split("\n")
l = [x.split(";")  for x in p if x != ""]
print l
>>> [['c', ' German for dog', ' Hund'], ['c', ' capital of France', ' Paris'], ['c', ' company', ' IBM'], ['c', ' nation', ' Sweden'], ['c', ' nickname for James', ' Jim']]