2024-04-18 17:51:00 发布
网友
我尝试在python中对一个列表进行切片,以便得到两个独立的列表:一个带有键,另一个带有值。我的清单如下:
[(b'a', 2), (b'surprise,', 1), (b'but', 1), (b'welcome', 1), (b'one', 1), (b'for', 1), (b'sure.', 1)]
我是一个比较新的编码,所以我只是想知道如何才能做到这样的事情。你知道吗
由于您专门使用“键”和“值”这两个术语,因此可以通过字典来实现:
my_dict = dict(my_list) my_keys = list(my_dict.keys()) my_values = list(my_dict.values())
如果您关心的只是某种类型的(只读)iterable,那么不要费心用list包装。你知道吗
list
Netwave有一个非常正确的答案,但这里有一个简单的方法:
鉴于:
data = [(b'a', 2), (b'surprise,', 1), (b'but', 1), (b'welcome', 1), (b'one', 1), (b'for', 1), (b'sure.', 1)]
可以使用循环将其解包:
keylist = [] vallist = [] for item in data: keylist.append(item[0]) vallist.append(item[1]) # You end up with keys in keylist and values in vallist
您还可以使用“元组解包”将每个元组放入两个变量:
keylist = [] vallist = [] for k,v in data: keylist.append(k) vallist.append(v) # You end up with keys in keylist and values in vallist
您可以使用列表理解简化:
keylist = [item[0] for item in data] vallist = [item[1] for item in data]
为了让人讨厌,您还可以使用元组解包:
kl,vl = [item[0] for item in data], [item[1] for item in data]
使用zip解包数据:
zip
>>> l = [(b'a', 2), (b'surprise,', 1), (b'but', 1), (b'welcome', 1), (b'one', 1), (b'for', 1), (b'sure.', 1)] >>> [*zip(*l)] # similar to list(zip(*l)) [(b'a', b'surprise,', b'but', b'welcome', b'one', b'for', b'sure.'), (2, 1, 1, 1, 1, 1, 1)]
如果您想要列表而不是元组,请使用理解:
>>> [list(x) for x in zip(*l)] [[b'a', b'surprise,', b'but', b'welcome', b'one', b'for', b'sure.'], [2, 1, 1, 1, 1, 1, 1]]
要修复l是否为空列表,可以使用带有or表达式的组合:
l
or
>>> keys, values = [*zip(*[])] or ([], []) >>> keys [] >>> values []
由于您专门使用“键”和“值”这两个术语,因此可以通过字典来实现:
如果您关心的只是某种类型的(只读)iterable,那么不要费心用
list
包装。你知道吗Netwave有一个非常正确的答案,但这里有一个简单的方法:
鉴于:
可以使用循环将其解包:
您还可以使用“元组解包”将每个元组放入两个变量:
您可以使用列表理解简化:
为了让人讨厌,您还可以使用元组解包:
使用
zip
解包数据:如果您想要列表而不是元组,请使用理解:
要修复
l
是否为空列表,可以使用带有or
表达式的组合:相关问题 更多 >
编程相关推荐