2010-12-01 11 views
2

リストの各項目に1を加えるには、Python(2.4.4)でmap関数を使う必要があります。そのため、文字列を整数に変換しようとしました。ネストされたリストにマップ関数を使用し、文字列を整数に変換する方法は?

line=[['10', '13\n'], ['3', '4\n'], ['5', '3\n'], ['1', '13']] 

map(lambda X:(X+1),int(line)) 

これは\nとネストのために機能しませんか?

+1

これはエラーです: 'TypeError:int()引数は 'list'ではなく文字列または数字でなければなりません – chrisaycock

+1

最初のリストの代わりにリスト内のリストを反復処理する必要があります(これには型listのメンバーがあります)。 –

答えて

4

あなたの意図は明確ではありませんが、\ nの原因ではありません。

参照:

>>> line=[['10', '13\n'], ['3', '4\n'], ['5', '3\n'], ['1', '13']] 
>>> map(lambda X:([int(X[0])+1, int(X[1]) +1]),line) 
[[11, 14], [4, 5], [6, 4], [2, 14]] 
+0

その方法は意味があります。ありがとう。 – Carter

6

私はリストの内包表記を使用していますがmap

map(lambda line: map(lambda s: int(s) + 1, line), lines) 

をしたい場合は、リスト内包表記は

[[int(x) + 1 for x in line] for line in lines] 



>>> lines=[['10', '13\n'], ['3', '4\n'], ['5', '3\n'], ['1', '13']] 

>>> map(lambda line: map(lambda s: int(s) + 1, line), lines) 
[[11, 14], [4, 5], [6, 4], [2, 14]] 

>>> [[int(x) + 1 for x in line] for line in lines] 
[[11, 14], [4, 5], [6, 4], [2, 14]] 
+0

これも問題なく動作します。ありがとう。 – Carter

1

整数に改行して文字列を変換するだろう問題ではないですが(int("1a")はあいまいですが、fo rの例では、Pythonはそれを許可しません)。

コード内のマッピングは、サブリストをラムダ関数に順番に渡します。したがって、あなたは再び内側のリストを反復処理する必要があります。

>>> line = [['10', '13\n'], ['3', '4\n'], ['5', '3\n'], ['1', '13']] 
>>> print map(lambda sublist: map(int, sublist), line) 
[[10, 13], [3, 4], [5, 3], [1, 13]] 

1ずつ増加するために、それは上記のような単純なものになります。

map(lambda sublist: map(lambda x: int(x)+1, sublist), line) 
+0

別の良いアプローチ。 – Carter

1

開梱引数を使用します。

pairs=[['10', '13\n'], ['3', '4\n'], ['5', '3\n'], ['1', '13']] 
[[int(x) + 1, int(y) + 1] for x, y in pairs] 

ループ1個、ラムダなし。

+0

ありがとうございますが、地図が必要でした。 – Carter

関連する問題