2012-02-22 10 views
1

私は、文字列をスライスし、それらを比較し、その後、リストに要素を挿入(またはインデックス、またはセット、または何か)しようとしているようは、動的に使用して文字列をスライス変数

入力:

abba 

出力:入力の可変長考える

['ab', 'ba'] 

。だから、

私は

word = raw_input("Input word" 
slicelength = len(word)/2 
longword[:slicelength] 

list = [longwordleftslice] 
    list2 = [longwordrightslice] 

    list2 = list2[::-1 ] ## reverse slice 
    listoverall = list + list2 

しかし、内蔵のスライスコマンド[:i]iが整数であることを指定するような文字列をスライスます。

どうすればよいですか?

答えて

1

あなたはいつもそれを行うことができます。..

word = "spamspamspam" 
first_half = word[:len(word)//2] 
second_half = word[len(word)//2:] 

を任意の文字列sと任意の整数iについて、s == s[:i] + [:i]は不変です。 len(word)が奇数の場合、最初の文字より2番目の「半分」の文字が1つ多くなります。

python 3を使用している場合は、raw_inputではなくinputを使用してください。

+0

+1は、Python 3の 'raw_input'問題をキャッチします。 – senderle

1

あなたはPython 3を使用していると思います。/の代わりに//を使用してください。 Python 3では、/は常にfloatを返します。リストは好きではありません。 //は、小数点を超えてすべてを切り捨てるintを返します。

次に、中間点の前後にスライスするだけです。

>>> a = [0, 1, 2, 3, 4] 
>>> midpoint = len(a) // 2 
>>> a[:midpoint] 
[0, 1] 
>>> a[midpoint:] 
[2, 3, 4] 
+0

素晴らしいです、ありがとうございます。 –

+1

これは私の最初の推測でしたが、 'raw_input'を使っていませんでした。 – wim

+0

@wim、それは本当です。しかし、幸いにも '/'はどちらの場合でも動作します。いずれにしても、OPが真の除算以外の上記のコードから 'TypeError'を得る理由を想像することはできません。 – senderle

関連する問題