[英]Creating lists of variable length from one list
我想從單個列表中創建多個列表。 如果有來自用戶的數據,列表將具有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'...]
我怎么做到這一點?
不幸的是,如果你需要將非'no-data'運行到3個組中,或者每個'no-data'
單個數據塊,那么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']]
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']]
這似乎有效並且相當容易理解。 它不會創建單獨的變量,而是創建名為lists
。
data = ['no data', 'choice 1', 'choice 4', 'choice 2', 'no data', 'choice 1', '...etc']
lists = []
tmp = []
for elem in data:
if elem != 'no data':
tmp.append(elem)
else:
if tmp:
lists.append(tmp)
lists.append([elem])
tmp = []
if tmp:
lists.append(tmp)
for i, sublist in enumerate(lists, start=1):
print('list{}: {}'.format(i, sublist))
輸出:
list1: ['no data']
list2: ['choice 1', 'choice 4', 'choice 2']
list3: ['no data']
list4: ['choice 1', '...etc']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.