在列表中分组,重新读取序列

时间:2012-11-03 22:33:20

标签: python list

我有一个字符串(例如:BCVDBCVCBCBD),我已使用

将其转换为列表
seq_split = [string[i:i+1] for i in range (0, len(string),1)]

这导致了一个类似['B','C','V'.........,'D']的列表

现在考虑我以数字的形式(例如2)接受用户输入。我需要从头开始读第二个元素,即序列的第一个字母和距离第一个字母2个位置的字母(在计数中它将是从开始的第3个字母)。第二次生病需要阅读序列中的第二个字母,并且字母2再次放置。即序列的第2和第4个字母。 (我知道它有点令人困惑,因此有详细的解释)

如果用户输入是数字2: 然后在一个新列表中,我将需要附加(使用给定的字符串作为示例) - 'BV','CD','VB'等等在新列表中。

同样,如果输入为4.那么我创建的新列表将具有 - 'BB','CC'等...  我很困惑如何索引它们。

3 个答案:

答案 0 :(得分:7)

您可以使用

获得所需的列表
[x + y for x, y in zip(string, string[i:])]

其中i是用户选择的数字。例如:

>>> string = "BCVDBCVCBCBD"
>>> i = 2
>>> [x + y for x, y in zip(string, string[i:])]
['BV', 'CD', 'VB', 'DC', 'BV', 'CC', 'VB', 'CC', 'BB', 'CD']

答案 1 :(得分:4)

In [31]: L
Out[31]: ['B', 'C', 'V', 'D', 'B', 'C', 'V', 'C', 'B', 'C', 'B', 'D']

In [32]: sep = 2

In [33]: [L[i]+L[i+sep] for i in range(len(L)-sep)]
Out[33]: ['BV', 'CD', 'VB', 'DC', 'BV', 'CC', 'VB', 'CC', 'BB', 'CD']

In [34]: sep = 4

In [35]: [L[i]+L[i+sep] for i in range(len(L)-sep)]
Out[35]: ['BB', 'CC', 'VV', 'DC', 'BB', 'CC', 'VB', 'CD']

答案 2 :(得分:1)

#!/usr/bin/python
l = 'BCVDBCVCBCBD'
while True:
    try:
        step = int (raw_input('> '))
    except ValueError:
        import sys
        sys.exit(0);
    print map(
            lambda pos: ''.join(
                (
                    l[pos%len(l)],                                                                                                             
                    l[(pos+step)%len(l)]
                )),
            xrange(0, len(l))
            )

输出:

@delphi# python manglechars.py 
> 2
['BV', 'CD', 'VB', 'DC', 'BV', 'CC', 'VB', 'CC', 'BB', 'CD', 'BB', 'DC']
> 3
['BD', 'CB', 'VC', 'DV', 'BC', 'CB', 'VC', 'CB', 'BD', 'CB', 'BC', 'DV']
> 4
['BB', 'CC', 'VV', 'DC', 'BB', 'CC', 'VB', 'CD', 'BB', 'CC', 'BV', 'DD']
>