Python - 将字符串拆分为较小的块并分配变量

时间:2012-12-06 18:01:53

标签: python

是否可以在python中拆分一个字符串并将每个部分拆分为一个变量以便以后使用?如果可能的话,我希望能够按长度分割,但我不确定如何使用len()。

我试过这个,但它没有得到我所需要的东西:

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

结果:     [ '这个']

我想得到这样的结果:

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

8 个答案:

答案 0 :(得分:9)

如果您想一次访问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字符切片开头的索引。 for i in将迭代这些索引。 x[i:i+step]获得的x片段从索引i开始,且字符长step

如果您知道每次都会完全四件,那么您可以这样做:

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

3 * step < len(x) <= 4 * step

会发生这种情况

如果你没有四件,那么Python会给你一个ValueError试图解压缩这个列表。因此,我认为这种技术非常脆弱,不会使用它。

你可以简单地做

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

现在,您曾经访问a的位置,您可以访问x_pieces[0]。对于b,您可以使用x_pieces[1]等。这可以让您更灵活。

答案 1 :(得分:6)

您可以使用解压缩

a,b,c,d=x.split(' ');

答案 2 :(得分: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']

答案 3 :(得分: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']

答案 4 :(得分:1)

x = 'this is a string'
splitted = x.split()
count = 0
while count <= len(splitted) -1:
    print splitted[count]
    count = count + 1

这将在一行中打印每个部分...在这里您还可以看到如何使用len()

while循环将打印每一行,直到计数器达到最大长度

答案 5 :(得分: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

答案 6 :(得分: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)

答案 7 :(得分:0)

这将在字符串少于27个字的约束下产生您想要的确切输出。您可以随时使用generators,以防用完钥匙来代表块。

x      = 'this is a string'
chunks = x.split(' ')
key    = 'a'
for chunk in chunks:
    print key + " = " + chunk
    key = chr(ord(key) + 1)