10

Pythonで文字列を分割し、分割された各部分を後で使用する変数に割り当てることは可能ですか? 可能であれば長さで分割できるようにしたいのですが、len() を使用してどのように機能するかわかりません。

私はこれを試しましたが、必要なものが得られませんでした:

x = 'this is a string'
x.split(' ', 1)
print x

結果: ['これ']

私はこのような結果になりたい:

a = 'this'
b = 'is'
c = 'a'
d = 'string'
4

8 に答える 8

11

一度に 3 文字の文字列にアクセスしたい場合は、slicingを使用する必要があります。

次のようなリスト内包表記を使用して、文字列の 3 文字の長さの部分のリストを取得できます。

>>> x = 'this is a string'
>>> step = 3
>>> [x[i:i+step] for i in range(0, len(x), step)]
['thi', 's i', 's a', ' st', 'rin', 'g']
>>> step = 5
>>> [x[i:i+step] for i in range(0, len(x), step)]
['this ', 'is a ', 'strin', 'g']

重要な点は次のとおりです。

[x[i:i+step] for i in range(0, len(x), step)]

range(0, len(x), step)step-character スライスの開始インデックスを取得します。 for i inこれらのインデックスを反復処理します。 インデックスから始まり、長さが文字x[i:i+step]のスライスを取得します。xistep

毎回正確に4 ピースが得られることがわかっている場合は、次のようにできます。

a, b, c, d = [x[i:i+step] for i in range(0, len(x), step)]

これは、次の場合に発生します3 * step < len(x) <= 4 * step

ちょうど 4 個のピース​​がない場合、Python はValueErrorこのリストをアンパックしようとします。このため、この手法は非常に脆弱であると考え、使用しません。

あなたは簡単に行うことができます

x_pieces = [x[i:i+step] for i in range(0, len(x), step)]

にアクセスしていた場所に、 にアクセスaできるようになりx_pieces[0]ました。などにb使用できますx_pieces[1]。これにより、柔軟性が大幅に向上します。

于 2012-12-06T18:17:33.930 に答える
6

あなたは開梱を使用することができます

a,b,c,d=x.split(' ');
于 2012-12-06T18:10:49.367 に答える
5

いくつかの選択肢

私は通常、正規表現に傾倒していませんが、文字列をチャンクするには、使用するのも悪くありません。

>>> s = 'this is a string'
>>> re.findall('.{1,3}', s)
['thi', 's i', 's a', ' st', 'rin', 'g']

そしてやり過ぎ

>>> t = StringIO(s)
>>> list(iter(lambda: t.read(3), ''))
['thi', 's i', 's a', ' st', 'rin', 'g']
于 2012-12-06T18:54:23.580 に答える
4

次のようなことを試すことができます:

In [77]: x = 'this is a string'

In [78]: a,b,c,d=[[y] for y in x.split()]

In [79]: a
Out[79]: ['this']

In [80]: b
Out[80]: ['is']

In [81]: c
Out[81]: ['a']

In [82]: d
Out[82]: ['string']

使用itertools.islice():

In [144]: s = 'this is a string'

In [145]: lenn=len(s)//3 if len(s)%3==0 else (len(s)//3)+1

In [146]: it=iter(s)

In [147]: ["".join(islice(it,3)) for _ in range(lenn)]
Out[147]: ['thi', 's i', 's a', ' st', 'rin', 'g']
于 2012-12-06T18:03:20.600 に答える
1
x = 'this is a string'
splitted = x.split()
count = 0
while count <= len(splitted) -1:
    print splitted[count]
    count = count + 1

これにより、各パーツが1行で印刷されます...ここでは、使用方法も確認できますlen()

whileループは、カウンターが最大長に達するまで各行を出力します

于 2012-12-06T18:20:43.287 に答える
1
x, i = 'this is a string', 0 #assigning two variables at once
while i <= len(x):
   y = x[i: i + 3]
   print y
   i += 3  #i = i + 3

これには「スペース」文字 (' ') が含まれます。

各番号を保持したい場合は、それらをリストに保持します。

x, my_list, i = 'this is a string', [], 0
while i <= len(x):
   y = x[i : i + 3]
   my_list.append(y)
   i += 3
于 2012-12-06T18:28:07.637 に答える
0
 def tst(sentence):
    print sentence
    bn=sentence.split(" ");
    i=0
    for i in range(0,len(bn)):
          a= bn[i]
          i=i+1
          print a

この方法でテストします。

 if __name__ == '__main__':
      x="my name is good"
      tst(x)
于 2012-12-06T19:17:30.430 に答える
0

これにより、文字列が 27 語未満であるという制約の下で、必要な正確な出力が生成されます。チャンクを表すキーが不足した場合は、いつでもジェネレーターを使用できます。

x      = 'this is a string'
chunks = x.split(' ')
key    = 'a'
for chunk in chunks:
    print key + " = " + chunk
    key = chr(ord(key) + 1)
于 2013-11-14T12:28:07.553 に答える