5

を使用してリストに変換した文字列 (例: BCVDBCVCBCBD) があります。

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

これにより、 ['B' ,'C','V'..........,'D'] のようなリストが得られました。

ここで、ユーザー入力を数値の形式で取得することを検討します (たとえば、2 とします)。最初から 2 つおきの要素、つまりシーケンスの最初の文字と、最初の文字から 2 桁離れた文字を読み取る必要があります (数えると、最初から 3 番目の文字になります)。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 に答える