这是我的列表
lis = [['For the first', '$7.56'], ['For the next', '$16.69'],
['For the first', '$18.34'], ['For the next', '$43.47']]
在这种情况下,将始终存在2个"for the first"
和N倍"for the next"
例如:
lis = [['For the first', '$7.56'], ['For the next', '$16.69'],['for the next','$3.4'],['for the next','$2'],['For the first', '$18.34'], ['For the next', '$43.47'],[for the next,'$34']
我想把清单分成两份。
1:从1"开始;对于第一个";到第二个"对于第一个"(不包括(
2:从第二个‘对于第一个’(包括(到最后一个元素
delivery=[]
supply=[]
for j in range(1,len(lis)):
if(lis[j][0].lower()=='for the first'):
break
else:
delivery.append(lis[j][1])
print(delivery)
如果可以保证在索引0中有'for the first'
的列表中有两个项目,会这样做吗:
lst = [['For the first', '$7.56'], ['For the next', '$16.69'],
['For the first', '$18.34'], ['For the next', '$43.47']]
lst_first = []
for i, item in enumerate(lst):
if item[0].lower() == 'for the first':
next_occurence = next(j for j, item in enumerate(lst[i+1:], 1) if item[0].lower()=='for the first')
lst_first = lst[i+1:next_occurence]
lst_other = lst[next_occurence:]
break
其产生:
print(lst_first) # [['For the next', '$16.69']]
print(lst_other) # [['For the first', '$18.34'], ['For the next', '$43.47']]
解释
它的工作方式是,它使用一个简单的for
循环来查找'for the first'
的第一个实例,然后使用next
来查找第二个实例。使用next
的第二次搜索不搜索整个列表,而是搜索从第一个实例之后的元素开始的列表片段。当找到这两个实例时,生成的列表将被组装为第一个实例的切片。之后,我们将break
从for
循环中取出。
p.S
不管你是否需要lower()
电话,我都由你决定。请注意,如果您的输入总是一致的,那么它是多余的。
您需要计算看到"For the first"
的次数,并根据情况将值保存在第一个或第二个列表中:
def split_list(values):
first_half, second_half = [], []
first_counter = 0
for name, amount in values:
if name == "For the first":
first_counter += 1
if first_counter == 1:
first_half.append([name, amount])
elif first_counter == 2:
second_half.append([name, amount])
return first_half, second_half
使用dict,您可以简化它,key
是您看到该模式的次数,而该值只是列表中的值。
从那以后,你会返回第一次看到后的,和第二次看到后的
def split_list(values):
result = defaultdict(list)
first_counter = 0
for name, amount in values:
if name == "For the first":
first_counter += 1
result[first_counter].append([name, amount])
return result.get(1, []), result.get(2, [])
Code Demo
如果您希望新列表仅包含美元金额,请将.append([name, amount])
替换为.append(amount)