0

リストの単一のリストがあります

w = [['2', '22', '32', '44', '55', '66', '69', '94'], ['22', '24', '49', '74', '90', '113', '130', '140']]

これから、リストの新しいリストを導出する必要があります。 where : even indices will have 1 subtracted from themandのすべての要素all odd indices will have 1 added to them。したがって、上記のリストは次のようになります。

x = [['1','23','31','45','54','67','68','93'],['21','25','48','75','89','114','129','141']]

どんな助けでも大歓迎です。

4

4 に答える 4

5
>>> w = [['2', '22', '32', '44', '55', '66', '69', '94'], ['22', '24', '49', '74', '90', '113', '130', '140']]
>>> [[str(int(s)+(1 if i%2 else -1)) for i, s in enumerate(lst)] for lst in w]
[['1', '23', '31', '45', '54', '67', '68', '95'], ['21', '25', '48', '75', '89', '114', '129', '141']]
于 2013-03-26T23:36:00.770 に答える
1
于 2013-03-26T23:49:31.740 に答える
1

リスト内包表記の回答が投稿されました。単純な for ループを使用する別の方法を次に示します。

for ls in w:
    for i, v in enumerate(ls):
        if i % 2:
            ls[i] = str(int(v) + 1)
        else:
            ls[i] = str(int(v) - 1)
于 2013-03-26T23:45:54.773 に答える
0

したがって、1つの方法を次に示します。

w = [[str(int(y)+(-1,1)[i%2]) for i,y in enumerate(x)] for x in w]

基本的に、リストを反復処理してから、各リストの要素を反復処理し、x%2(奇数/偶数) に応じて 1 を加算/減算します。

これは 1 つまたは 2 つのリスト コンストラクターで行われるため、リストは反復されるたびに再構築されます。

于 2013-03-26T23:38:05.173 に答える