gpt4 book ai didi

python - 使用 Python 高阶函数来操作列表

转载 作者:太空狗 更新时间:2023-10-29 21:25:48 26 4
gpt4 key购买 nike

我列出了这个 list ;每个项目都是一个包含逗号(在某些情况下)和冒号(总是)的字符串:

dinner = [
'cake,peas,cheese : No',
'duck,broccoli,onions : Maybe',
'motor oil : Definitely Not',
'pizza : Damn Right',
'ice cream : Maybe',
'bologna : No',
'potatoes,bacon,carrots,water: Yes',
'rats,hats : Definitely Not',
'seltzer : Yes',
'sleeping,whining,spitting : No Way',
'marmalade : No'
]

我想根据上面的列表创建一个新列表,如下所示:

['cake : No',
'peas : No',
'cheese : No',
'duck : Maybe',
'broccoli : Maybe',
'onions : Maybe',
'motor oil : Definitely Not',
'pizza : Damn Right',
'ice cream : Maybe',
'bologna : No',
'potatoes : Yes',
'bacon : Yes',
'carrots : Yes',
'water : Yes',
'rats : Definitely Not',
'hats : Definitely Not',
'seltzer : Yes',
'sleeping : No Way',
'whining : No Way',
'spitting : No Way',
'marmalade : No']

但我想知道是否/如何在一行或两行主要使用 Python 高阶函数的高效代码中做到这一点。我一直在尝试:

reduce(lambda x,y: x + y, (map(lambda x: x.split(':')[0].strip().split(','), 晚餐)))

...产生这个:

['cake',
'peas',
'cheese',
'duck',
'broccoli',
'onions',
'motor oil',
'pizza',
'ice cream',
'bologna',
'potatoes',
'bacon',
'carrots',
'water',
'rats',
'hats',
'seltzer',
'sleeping',
'whining',
'spitting',
'marmalade']

...但我正在努力将冒号后的每个字符串的一部分附加到每个项目上。

最佳答案

我会使用 zipmapitertools.repeat 创建一个字典:

from itertools import repeat


data = ({k.strip(): v.strip() for _k, _v in map(lambda x: x.split(":"), dinner)
for k, v in zip(_k.split(","), repeat(_v))})

from pprint import pprint as pp

pp(data)

输出:

{'bacon': 'Yes',
'bologna': 'No',
'broccoli': 'Maybe',
'cake': 'No',
'carrots': 'Yes',
'cheese': 'No',
'duck': 'Maybe',
'hats': 'Definitely Not',
'ice cream': 'Maybe',
'marmalade': 'No',
'motor oil': 'Definitely Not',
'onions': 'Maybe',
'peas': 'No',
'pizza': 'Damn Right',
'potatoes': 'Yes',
'rats': 'Definitely Not',
'seltzer': 'Yes',
'sleeping': 'No Way',
'spitting': 'No Way',
'water': 'Yes',
'whining': 'No Way'}

或者使用字典构造函数:

from itertools import repeat

data = dict(map(str.strip, t) for _k, _v in map(lambda x: x.split(":"), dinner)
for t in zip(_k.split(","), repeat(_v)))

from pprint import pprint as pp

pp(data)

如果你真的想要一个字符串列表,我们可以使用 itertools.chain 做类似的事情并加入子字符串:

from itertools import repeat, chain

data = chain.from_iterable(map(":".join, zip(_k.split(","), repeat(_v)))
for _k, _v in map(lambda x: x.split(":"), dinner))


from pprint import pprint as pp

pp(list(data))

输出:

['cake: No',
'peas: No',
'cheese : No',
'duck: Maybe',
'broccoli: Maybe',
'onions : Maybe',
'motor oil : Definitely Not',
'pizza : Damn Right',
'ice cream : Maybe',
'bologna : No',
'potatoes: Yes',
'bacon: Yes',
'carrots: Yes',
'water: Yes',
'rats: Definitely Not',
'hats : Definitely Not',
'seltzer : Yes',
'sleeping: No Way',
'whining: No Way',
'spitting : No Way',
'marmalade : No']

关于python - 使用 Python 高阶函数来操作列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35530782/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com