从列表中提取有序子序列
Extracting ordered sub sequence from list
我正在尝试提取 ORDERED 序列。例如,
a = [2, 3, 1, 4, 6, 8, 5, 9]
b = [3, 8, 9, 4, 10, 11, 5]
c = [3,4,5]
c
必须包含 a
和 b
共有的值,其中 [3,4,5]
出现在一个顺序中,[8,9]
不能出现,因为它介于 [3,4]
在 a
和 [4,5]
之间 b
再举例如下:
a = [2, 3, 1, 4, 6, 8, 9, 10]
b = [2, 8, 3, 9, 10, 11]
c = [2,3,9,10]
我尝试了以下代码:
a = [2, 3, 1, 4, 6, 8, 5, 9]
b = [3, 8, 9, 4, 10, 11, 5]
for i in a:
for j in b:
if i==j:
print i
break
我得到 错误 结果如下:
3
4
8
5
9
如何避免得到这样的输出?还有一个 pythonic 的方法吗?
使用 tempval
并存储上下文。这可以使用 enumerate
内置函数来完成。现在使用切片,您将获得预期的输出。
a = [2, 3, 1, 4, 6, 8, 5, 9]
b = [3, 8, 9, 4, 10, 11, 5]
tempval = 0
for i in a:
for ind,j in enumerate(b[tempval:]):
if i==j:
print i
tempval = ind
输出为
3
4
5
@Ekoji,要按顺序获取列表,您可以尝试以下代码。对列表a中的元素进行排序,这样就得到了有序的。
a = [2, 3, 1, 4, 6, 8, 5, 9]
b = [3, 8, 9, 4, 10, 11, 5]
a.sort()
# use your logic
for i in a:
for j in b:
if i == j:
print ("i is : %s j is :%s" % (i , j))
if len(c) > 1:
print c
print ("validation : %s :%s" %( c[-1] , i-1))
if c[-1:] == [i-1]:
print "continue"
c.append(i)
else:
print "do Nothing"
else:
c.append(i)
print c
Output :
[3, 4]
validation : 4 :4
continue
[3, 4, 5]
validation : 5 :7
do Nothing
[3, 4, 5]
validation : 5 :8
do Nothing
[3, 4, 5]
我正在尝试提取 ORDERED 序列。例如,
a = [2, 3, 1, 4, 6, 8, 5, 9]
b = [3, 8, 9, 4, 10, 11, 5]
c = [3,4,5]
c
必须包含 a
和 b
共有的值,其中 [3,4,5]
出现在一个顺序中,[8,9]
不能出现,因为它介于 [3,4]
在 a
和 [4,5]
之间 b
再举例如下:
a = [2, 3, 1, 4, 6, 8, 9, 10]
b = [2, 8, 3, 9, 10, 11]
c = [2,3,9,10]
我尝试了以下代码:
a = [2, 3, 1, 4, 6, 8, 5, 9]
b = [3, 8, 9, 4, 10, 11, 5]
for i in a:
for j in b:
if i==j:
print i
break
我得到 错误 结果如下:
3
4
8
5
9
如何避免得到这样的输出?还有一个 pythonic 的方法吗?
使用 tempval
并存储上下文。这可以使用 enumerate
内置函数来完成。现在使用切片,您将获得预期的输出。
a = [2, 3, 1, 4, 6, 8, 5, 9]
b = [3, 8, 9, 4, 10, 11, 5]
tempval = 0
for i in a:
for ind,j in enumerate(b[tempval:]):
if i==j:
print i
tempval = ind
输出为
3
4
5
@Ekoji,要按顺序获取列表,您可以尝试以下代码。对列表a中的元素进行排序,这样就得到了有序的。
a = [2, 3, 1, 4, 6, 8, 5, 9]
b = [3, 8, 9, 4, 10, 11, 5]
a.sort()
# use your logic
for i in a:
for j in b:
if i == j:
print ("i is : %s j is :%s" % (i , j))
if len(c) > 1:
print c
print ("validation : %s :%s" %( c[-1] , i-1))
if c[-1:] == [i-1]:
print "continue"
c.append(i)
else:
print "do Nothing"
else:
c.append(i)
print c
Output :
[3, 4]
validation : 4 :4
continue
[3, 4, 5]
validation : 5 :7
do Nothing
[3, 4, 5]
validation : 5 :8
do Nothing
[3, 4, 5]