Python 如何根据列表值的重复性拆分列表列表?
假设我有一个以这种格式表示坐标的列表:Python 如何根据列表值的重复性拆分列表列表?,python,list,Python,List,假设我有一个以这种格式表示坐标的列表: [['1', '1'], ['2', '2'], ['3', '3'], ['1', '1'], ['5', '5'], ['6', '6'], ['7', '7'], ['5', '5'], ['8', '8'], ['9', '9'], ['10', '10'], ['8', '8']] 我想将此列表拆分为3个列表,以便第一个列表以列表[1,1]开头,以列表[1,1]结尾,第二个列表以列表[5,5]开头,以
[['1', '1'],
['2', '2'],
['3', '3'],
['1', '1'],
['5', '5'],
['6', '6'],
['7', '7'],
['5', '5'],
['8', '8'],
['9', '9'],
['10', '10'],
['8', '8']]
我想将此列表拆分为3个列表,以便第一个列表以列表[1,1]
开头,以列表[1,1]
结尾,第二个列表以列表[5,5]
开头,以列表[5,5]
结尾,等等
因此,基本上,每次遇到与列表初始值相同的值时,我都要创建一个新列表
你知道我怎样才能完成这样的手术吗
编辑。我尝试了一些尝试,但没有得到预期的结果:
poly_pts = []
for pt in tlist:
x = 0
init_pt = tlist[0]
if pt != init_pt:
poly_pts.append(pt)
x += 1
elif pt == init_pt:
poly_pts.append(pt)
init_pt = tlist[x+1]
#
试试这个:
t = [['1', '1'],
['2', '2'],
['3', '3'],
['1', '1'],
['5', '5'],
['6', '6'],
['7', '7'],
['5', '5'],
['8', '8'],
['9', '9'],
['10', '10'],
['8', '8']]
ix = 0
tmp = []
while ix < len(t):
tmp.append(t[ix:t.index(t[ix], ix+1)+1])
ix = t.index(t[ix], ix+1) + 1
>>> tmp
[[['1', '1'], ['2', '2'], ['3', '3'], ['1', '1']], [['5', '5'], ['6', '6'], ['7', '7'], ['5', '5']], [['8', '8'], ['9', '9'], ['10', '10'], ['8', '8']]]
t=['1',1'],
['2', '2'],
['3', '3'],
['1', '1'],
['5', '5'],
['6', '6'],
['7', '7'],
['5', '5'],
['8', '8'],
['9', '9'],
['10', '10'],
['8', '8']]
ix=0
tmp=[]
当ix>>tmp
[[['1', '1'], ['2', '2'], ['3', '3'], ['1', '1']], [['5', '5'], ['6', '6'], ['7', '7'], ['5', '5']], [['8', '8'], ['9', '9'], ['10', '10'], ['8', '8']]]
我不检查任何错误,这取决于你来实现。我使用的是[].index
,它给出列表中元素的索引,此函数还可以使用第二个参数指定要从哪个索引中搜索元素 您可以这样做:
first = []
all_lists = []
j = 0
for i, item in enumerate(a):
if first == []:
first = a[i]
print(first)
elif first == a[i]:
all_lists.append(a[j:i+1])
j = i + 1
first = []
print(all_lists)
这与您的第一次尝试类似,但我使用enumerate()给我一个索引和项的元组。诀窍是在找到匹配项后重新将first(如代码中的init_pt)指定为空 list.index()
给出元素在列表中第一次出现的位置的索引
temp =[]
while True:
try:
idx = list[1:].index(list[0])
except ValueError:
temp.append(list)
break
if idx == len(list)-2:
temp.append(list)
break
temp.append(list[:idx+2])
list = list[idx+2:]
上述代码中发生的本质是
在try
中,我们试图获取列表中除第一个元素之外的其余元素的索引。如果列表的其余部分中没有元素,它将引发ValueError
,并结束循环
如果我们得到元素的索引,例如,如果列表中有5个元素,比如list=[1,2,3,4,1]
idx=3
因此,如果idx+2=len(list)
那么这将是循环的结束,因为列表的这一部分之后将不剩下任何元素
否则循环将继续切片列表,直到出现上述两种情况之一对于for循环,这将非常容易。你为什么不自己试试呢?我已经试了一个小时了,但我需要一些想法来帮助我。这就是我为什么发帖子的原因。感谢您宝贵的帮助…如果您已经尝试了1小时,那么您应该有一些失败的尝试来证明,我们可以帮助您改进。在这里,当问题表现出一些努力时,通常会受到欢迎。编辑了主要帖子…虽然此代码可能会回答问题,但提供了有关此代码为什么和/或如何回答问题的附加上下文,提高了其长期价值。
temp =[]
while True:
try:
idx = list[1:].index(list[0])
except ValueError:
temp.append(list)
break
if idx == len(list)-2:
temp.append(list)
break
temp.append(list[:idx+2])
list = list[idx+2:]