如何提取序列中的第一个和最后一个字符串?

时间:2012-06-17 14:01:00

标签: python

我是python编程的新手。有人建议某种方法来执行以下操作:

整个数据存储在一个文件中。我不能打扰这个序列。

我想提取出链的第一个和最后一个节点。像这样有几个这样的链。数据内容是Giga Byte。

我对如何在python中解决这个问题一无所知。有人可以帮助你。

2 个答案:

答案 0 :(得分:1)

我不确定你的序列是如何工作的,特别是如何选择开始和结束元素。所以我所做的基本上是我设置了一个起始值,然后匹配一次,之后它试图一遍又一遍地找到相同的值。

首先,我为数据制作了一个生成器。正如你所提到的,你有很多数据,所以你可能会为这些行提供某种顺序生成器。我用静态生成器模拟产生示例行:

>>> def dataReader():
        yield 'a1=hi'
        yield 'b1=hello'
        yield 'a1=how'
        yield 'b1=to'
        yield 'a1=hello'
        yield 'b1=python'
        yield 'a1=format'
        yield 'b1=computer'
        yield 'a1=python'
        yield 'b1=good programming language'

然后我设置一个空列表来保存结果和最后一个元素,它被初始化为起始值

>>> lst = []
>>> last = 'hi' # as we want to begin with 'hi' which does not have a duplicate?

接下来,我浏览数据,用等号分割并比较最后一个值。我使用值None来标记前一个值已经找到它的重复。为了使它更简单,我现在完全忽略key,但如果你需要确保在匹配新值时前一个键与当前键不同,你可以轻松添加更多条件。

>>> for line in dataReader():
        key, value = line.split('=')
        if last == None:
            lst.append(line)
            last = value
        elif last == value:
            lst.append(line)
            last = None
>>> lst
['a1=hi', 'b1=hello', 'a1=hello', 'b1=python', 'a1=python', 'b1=good programming language']

答案 1 :(得分:0)

首先查看“列表”是什么,例如。

data[0]=hi
data[1]=hello
data[2]=how
data[3]=to
data[4]=hello
data[5]=python
data[6]=format
data[7]=computer
data[8]=python
data[9]=good programming language

多维列表,具体取决于您的数据。

data[0][0]=hi
data[0][1]=hello
data[0][2]=how
data[0][3]=to

data[1][0]=hello
data[1][1]=python
data[1][2]=format
data[1][3]=computer
data[1][4]=python
data[1][5]=good programming language