0

ユーザーから文字列を受け取り、リストに表示して、リスト内の各器官に[文字、連続して繰り返される数字]が含まれるようにする必要があります。

私のコードは良いと思いましたが、うまくいきません。http://pythontutor.comを使用しましたが、問題の1つは、var.nextとcurrentが常に同じ値のままであることがわかりました。

誰かがアイデアを持っていますか?

これが私のコードです:

    string = raw_input("Enter a string:")
    i=0
    my_list=[]
    current=string[i]
    next=string[i+1]
    counter=1
    j=0
    while i<range(len(string)) and next<=range(len(string)):

        if i==len(string)-1:
            break
        j+=1
        i+=1
        if current==next:
            counter+=1

        else:
            print my_list.append([string[i],counter])
            counter=1

出力:

Enter a string: baaaaab
As list: [['b', 1], ['a', 5], ['b', 1]]
4

3 に答える 3

3

ここで使用itertools.groupby()

>>> from itertools import groupby
>>> [[k, len(list(g))] for k, g in groupby("baaaaab")]
[['b', 1], ['a', 5], ['b', 1]]

またはライブラリを使用せずに:

strs = raw_input("Enter a string:")
lis = []
for x in strs:
   if len(lis) != 0:
      if lis[-1][0] == x:
         lis[-1][1] += 1
      else:
         lis.append([x, 1])
   else:
       lis.append([x, 1])         
print lis                   

出力:

Enter a string:aaabbbcccdef
[['a', 3], ['b', 3], ['c', 3], ['d', 1], ['e', 1], ['f', 1]]
于 2012-11-03T17:18:53.630 に答える
1

Aswini のコードのより単純な変形:

string = raw_input("Enter a string:")
lis = []
for c in string:
    if len(lis) != 0 and lis[-1][0] == c:
        lis[-1][1] += 1
    else:
        lis.append([c, 1]) 

print lis  
于 2012-11-03T17:35:26.797 に答える
0

これは、defaultdict を使用して非常に簡単に行うことができます。

import collections

defaultdict=collections.defaultdict
count=defaultdict(int)
string="hello world"
for x in string:
    count[x]+=1

リストに表示するには、次のことができます。

count.items()

この場合、次のように返されます。

[(' ', 1), ('e', 1), ('d', 1), ('h', 1), ('l', 3), ('o', 2), ('r', 1), ('w', 1)]
于 2012-11-03T17:38:40.340 に答える