5

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

seq_split = [string[i:i+1] for i in range (0, len(string),1)]

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

现在考虑我采用数字形式的用户输入(例如 2)。我需要从头开始读取每个第二个元素,即序列的第一个字母和距离第一个字母 2 个位置的字母(计数它将是从头开始的第三个字母)。第二次生病需要阅读序列中的第二个字母,并再次阅读距离 2 个位置的字母。即序列的第2个和第4个字母。(我知道它有点混乱,所以这里有一个详细的解释)

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

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

4

3 回答 3

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']
于 2012-11-03T22:38:53.973 回答
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']
于 2012-11-03T22:39:29.567 回答
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']
> 
于 2012-11-03T22:55:11.817 回答