gpt4 book ai didi

python - 从一个列表创建可变长度的列表

转载 作者:行者123 更新时间:2023-11-30 22:35:59 25 4
gpt4 key购买 nike

我想从一个列表创建多个列表。根据是否有来自用户的数据,列表将具有 1 个值或 3 个值。但是,由于数据附加到特定用户,因此必须保持顺序。

例如:

data = ['no data', 'choice 1', 'choice 4', 'choice 2', 'no data', 'choice 1', ...etc]

我希望输出是:

list1 = ['no data']
list2 = ['choice 1', 'choice4', 'choice 2']
list3 = ['no data']
list4 = ['choice 1'...]

我如何实现这一目标?

最佳答案

不幸的是,如果您需要将非“无数据”的运行分块为 3 个组,或者作为每个单独的 “无数据”的单例,则 itertools.groupby 将不起作用。数据'。所以,这是一些其他的东西:

In [40]: def group_lists(data):
...: final = []
...: contains_data = False
...: temp = []
...: for sub in data:
...: if sub == 'no data':
...: if contains_data:
...: final.append(temp)
...: temp = []
...: final.append([sub])
...: contains_data = False
...: else:
...: final.append([sub])
...: else:
...: contains_data = True
...: if len(temp) < 3:
...: temp.append(sub)
...: else:
...: final.append(temp)
...: temp = []
...: contains_data = False
...: return final
...:

In [41]: data = ['choice 1', 'choice 2', 'choice 1', 'choice 1', 'choice 4', 'choice 1', 'no data']

In [42]: group_lists(data)
Out[42]: [['choice 1', 'choice 2', 'choice 1'], ['choice 4', 'choice 1'], ['no data']]

In [43]: data2 = ['choice 1', 'choice 2', 'choice 1', 'choice 1', 'choice 4', 'choice 1', 'choice1', 'no data']

In [44]: group_lists(data2)
Out[44]:
[['choice 1', 'choice 2', 'choice 1'],
['choice 4', 'choice 1', 'choice1'],
['no data']]

原始答案

使用itertools.groupby :

In [15]: data = ['no data', 'choice 1', 'choice 4', 'choice 2', 'no data', 'choice 1']
...:

In [16]: import itertools

In [17]: grouped = [list(g) for _, g in itertools.groupby(data, lambda s: s == 'no data')]

In [18]: grouped[0]
Out[18]: ['no data']

In [19]: grouped[1]
Out[19]: ['choice 1', 'choice 4', 'choice 2']

In [20]: grouped[2]
Out[20]: ['no data']

In [21]: grouped[3]
Out[21]: ['choice 1']

拆开那句相当笨重的单行:

In [26]: lists = []
...: for _, g in itertools.groupby(data, lambda s: s == 'no data'):
...: lists.append(list(g))
...:

In [27]: lists[0]
Out[27]: ['no data']

In [28]: lists[1]
Out[28]: ['choice 1', 'choice 4', 'choice 2']

In [29]: lists[2]
Out[29]: ['no data']

In [30]: lists[3]
Out[30]: ['choice 1']

因此,结果是列表的列表:

In [32]: lists
Out[32]: [['no data'], ['choice 1', 'choice 4', 'choice 2'], ['no data'], ['choice 1']]

关于python - 从一个列表创建可变长度的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44349452/

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