在python中将一个列表分隔为两个单独的列表



这是我的列表

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的第二次搜索不搜索整个列表,而是搜索从第一个实例之后的元素开始的列表片段。当找到这两个实例时,生成的列表将被组装为第一个实例的切片。之后,我们将breakfor循环中取出。

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)

相关内容

  • 没有找到相关文章