整数のリストのリストがある場合は、次のように言います。
[['12' '-4' '66' '0'], ['23' '4' '-5' '0'], ['23' '77' '89' '-1' '0' ]]
数値を絶対値に変換してから単一の数値に変換したかったので、出力は次のようになります。
1246602345023778910
あなたが示しているのは(おそらく)文字列のリストのリストであり、構文は非常に独特です-サブリストは通常の通常のコンマで表示されますが、それぞれの内部にはスペースを含むリテラル文字列があります。実際にPythonに入力すると、各サブリストに単一の文字列が含まれるリストが表示されます.Pythonは、Cのように、コンパイル時に文字列リテラルを連結します。
適切なカンマを使用して、それぞれ複数の文字列のサブリストを持つことを意味し、「数字のリスト」(これはあなたが持っているものではありません-文字列のリストがあります!-) への言及は、単なる小さな偶然であり、次のようなものであると仮定します。 :
''.join(c for L in thelist for c in L).replace('-', '')
abs
連結/結合の目的で文字列が必要になるため、文字列レベルで操作するだけです (したがって、ダッシュを使用するのではなく、何も置き換えないでください)。
できるだけ複雑な方法でやりたい場合は、
''.join(str(abs(int(c))) for L in thelist for c in L)
も機能します(そして、より文字通りあなたが求めているものと一致します)が、最初のアイデアの方が優れています.
上記で指定したのは、文字列のリストのリストです。
2 パスのアプローチをお勧めします。
文字列から整数を取得し、絶対値を取ります。
[ abs(int(s)) for s in list ]
これらの数値を文字列に結合し、整数に変換します
''.join([ ''.join(x) for x in listoflists ])
これら 2 つのアプローチを組み合わせると、次のようになります。
>>> listoflists = [['12','-4','66','0'],['23','4','-5','0'],['23','77','89','-1','0']]
>>> int(''.join([ ''.join([ str(abs(int(s))) for s in list ]) for list in listoflists ]))
1246602345023778910L
ただし、読みやすくはありません。そのため、理解するのに苦労している可能性のある人にとってより意味のあるものにするために、分割したままにしておくことをお勧めします。
注:あなたが述べたように、実際に整数のリストがある場合は、はるかに簡単です:
>>> listofints = [12,-4,66,0,23,4,-5,0,23,77,89,-1,0]
>>> int(''.join( [ str(abs(x)) for x in listofints ]))
1246602345023778910L
ここで itertools.chain を使用して、ネストを取り除き、数値文字列を連結し、「-」記号を削除してから数値に変換できます。
import itertools
mylist = [['12' '-4' '66' '0'], ['23' '4' '-5' '0'], ['23' '77' '89' '-1' '0']]
num = int( ''.join(itertools.chain(*mylist)).replace('-','') )
編集:以前は腹筋の要件を逃していました。
2番目の編集:おそらく str(abs(int(n))) よりも効率的で、不器用ではない置換を使用しました(礼儀:アレックスの答え)
私はPythonが初めてなので、もっと効率的な方法があれば許してください:)
#!/usr/bin/python
str = ''
lists = [['12' '-4' '66' '0'], ['23' '4' '-5' '0'], ['23' '77' '89' '-1' '0']]
for list in lists:
str += list[0].replace('-', '')
print int(str)
他の回答で指摘されているように、内部リストは見た目ほど「リスト」ではありません。コンマが欠落しているため、Python は (私が思うに) それらをすべて 1 つの文字列に連結し、1 つの項目のリストを提供します。これは次のようになります。
[['12-4660'], ['234-50'], ['237789-10']]
いずれにせよ、結果を得るために数字ではないすべてのものを取り除くことができます (これはコンマの有無にかかわらず機能します):
''.join(x for x in str(mylist) if x.isdigit())