如何在列表中拆分列表中的项目(带分隔符)?
How do I split items in a list (with delimiter) within a list?
更新:对不起大家,我想说的是一个列表,在一个列表中。
如何使用定界符在另一个列表中拆分列表中的项目。例如:
x = [['temp1_a','temp2_b', None, 'temp3_c'],['list1_a','list2_b','list3_c']]
理想情况下,我想将它们拆分成一个字典,所以:
y = ['temp1','temp2', None, 'temp3','list1','list2','list3']
z = ['a','b', None, 'c','a','b','c']
我确定它使用拆分,但是当我尝试使用它时,我得到 'list' 对象没有属性 'split'。
使用list_comprehension.
>>> x = ['temp1_a','temp2_b', None, 'temp3_c']
>>> y, z = [i if i is None else i.split('_')[0] for i in x ], [i if i is None else i.split('_')[1] for i in x ]
>>> y
['temp1', 'temp2', None, 'temp3']
>>> z
['a', 'b', None, 'c']
更新:
>>> x = [['temp1_a','temp2_b', None, 'temp3_c'],['list1_a','list2_b','list3_c']]
>>> y, z = [i if i is None else i.split('_')[0] for i in itertools.chain(*x)], [i if i is None else i.split('_')[1] for i in itertools.chain(*x) ]
>>> y
['temp1', 'temp2', None, 'temp3', 'list1', 'list2', 'list3']
>>> z
['a', 'b', None, 'c', 'a', 'b', 'c']
这是我使用 list comprehensions
:
的方法
xp = [(None,)*2 if i is None else i.split('_') for i in x]
y, z = map(list, zip(*xp))
第二行右边的表达式只是一种优雅的写法:
[i[0] for i in xp], [i[1] for i in xp]
有很多方法可以做到这一点...
>>> from itertools import chain
>>> y, z = zip(*([None]*2 if not i else i.split('_') for i in chain(*x)))
>>> y
('temp1', 'temp2', None, 'temp3', 'list1', 'list2', 'list3')
>>> z
('a', 'b', None, 'c', 'a', 'b', 'c')
现在是晚上的那个时间,所以我想写一个递归 python 3 生成器。
def flatten_list(a_list):
for element in a_list:
if isinstance(element, list):
yield from flatten_list(element)
else:
yield element
# {"temp1": "a", "temp2": "b"...}
values = dict(string.split('_')
for string in flatten_list(x)
if string is not None)
更新:对不起大家,我想说的是一个列表,在一个列表中。
如何使用定界符在另一个列表中拆分列表中的项目。例如:
x = [['temp1_a','temp2_b', None, 'temp3_c'],['list1_a','list2_b','list3_c']]
理想情况下,我想将它们拆分成一个字典,所以:
y = ['temp1','temp2', None, 'temp3','list1','list2','list3']
z = ['a','b', None, 'c','a','b','c']
我确定它使用拆分,但是当我尝试使用它时,我得到 'list' 对象没有属性 'split'。
使用list_comprehension.
>>> x = ['temp1_a','temp2_b', None, 'temp3_c']
>>> y, z = [i if i is None else i.split('_')[0] for i in x ], [i if i is None else i.split('_')[1] for i in x ]
>>> y
['temp1', 'temp2', None, 'temp3']
>>> z
['a', 'b', None, 'c']
更新:
>>> x = [['temp1_a','temp2_b', None, 'temp3_c'],['list1_a','list2_b','list3_c']]
>>> y, z = [i if i is None else i.split('_')[0] for i in itertools.chain(*x)], [i if i is None else i.split('_')[1] for i in itertools.chain(*x) ]
>>> y
['temp1', 'temp2', None, 'temp3', 'list1', 'list2', 'list3']
>>> z
['a', 'b', None, 'c', 'a', 'b', 'c']
这是我使用 list comprehensions
:
xp = [(None,)*2 if i is None else i.split('_') for i in x]
y, z = map(list, zip(*xp))
第二行右边的表达式只是一种优雅的写法:
[i[0] for i in xp], [i[1] for i in xp]
有很多方法可以做到这一点...
>>> from itertools import chain
>>> y, z = zip(*([None]*2 if not i else i.split('_') for i in chain(*x)))
>>> y
('temp1', 'temp2', None, 'temp3', 'list1', 'list2', 'list3')
>>> z
('a', 'b', None, 'c', 'a', 'b', 'c')
现在是晚上的那个时间,所以我想写一个递归 python 3 生成器。
def flatten_list(a_list):
for element in a_list:
if isinstance(element, list):
yield from flatten_list(element)
else:
yield element
# {"temp1": "a", "temp2": "b"...}
values = dict(string.split('_')
for string in flatten_list(x)
if string is not None)