我想将字符串中的行列表转换为列表列表,并删除行中的每个项目。
以下作品,但我怀疑有更简洁的方法可以做到这一点。
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']]
答案 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']]