4

私はプログラミングにまったく慣れておらず、昨日、科学的な目的でPythonを学び始めました。

ここで、1つの非常に長い文字列(174文字)を次のようにいくつかの小さな文字列に分割したいと思います。

string = 'AA111-99XYZ '
split = ('AA', 11, 1, -99, 'XYZ')

今のところ、私が考えることができるのはスライス構文をx回使用することだけですが、もっとエレガントな方法があるのではないでしょうか。整数のリストを使用して、分割する場所の位置を示す方法はありますか?

split_at = (2, 4, 5, 8, 11)
split = function(split_at, string)

私の質問があまりにもばかげていないことを願っています-私は同様の例を見つけることができませんでしたが、多分私は私が探しているものがわからないのですか?

ありがとう、

1月

4

4 に答える 4

3

このような:

>>> string = 'AA111-99XYZ '

>>> split_at = [2, 4, 5, 8, 11]

>>> [string[i:j] for i, j in zip([0]+split_at, split_at+[None])]

['AA', '11', '1', '-99', 'XYZ', ' ']
于 2013-02-22T18:32:10.447 に答える
1
def split_string(string, points):
    for left, right in zip(points, points[1:]):
        yield string[left:right]
于 2013-02-22T18:32:20.097 に答える
0

私自身は Python に比較的慣れていないので、Python の機能にまだ慣れていない人をガイドするために、ここでは完全な初心者のアプローチを取りました。

string = 'AA111-99XYZ '
split_at = [2, 4, 5, 8, 11]

for i in range(len(split_at)):
    if i == 0:
        print string[:split_at[i]]
    if i < len(split_at)-1:
        print string[split_at[i]:split_at[i+1]]
    if i == len(split_at)-1:
        print string[split_at[i]:]
于 2013-02-22T22:56:39.420 に答える
0

冗長性を避けるために、ATOzTOA の優れたソリューションを採用して、それをランバ関数に入れることができます。

st = 'AA111-99XYZ '
sa = [2, 4, 5, 8, 11]

res = lambda string,split_at:[string[i:j] for i, j in zip([0]+split_at, split_at+[None])]


print(res(st,sa))
于 2013-02-22T18:37:55.470 に答える