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:]