1

ここに各行に7つの州を含むリストを表示しようとしていますが、これまでのところ、すべての州の1つの長い文字列として表示され、各州が引用符で囲まれています。これはCSクラス用であることを忘れていましたが、まだ iter を学んでいないため、使用を許可していません。私が与えられた唯一のヒントは、STATE_LIST を文字列に変換し、「\n」を使用して分割することでした

state = str(STATE_LIST)

displaystates = Text(Point(WINDOW_WIDTH/2, WINDOW_HEIGHT/2), state.split('\n'))
displaystates.draw(win)

STATE_LIST は次のようになります

STATE_VOTES = {
"AL" : 9, # Alabama
"AK" : 3, # Alaska
"AZ" : 11, # Arizona
"AR" : 6, # Arkansas
"CA" : 55, # California
"CO" : 9, # Colorado
"CT" : 7, # Connecticut
"DE" : 3, # Delaware
"DC" : 3, # Washington DC
"FL" : 29, # Florida
"GA" : 16, # Georgia
"HI" : 4, # Hawaii
"ID" : 4, # Idaho
"IL" : 20, # Illinois
"IN" : 11, # Indiana
"IA" : 6, # Iowa
"KS" : 6, # Kansas
"KY" : 8, # Kentucky
"LA" : 8, # Louisiana
"ME" : 4, # Maine
"MD" : 10, # Maryland
"MA" : 11, # Massachusetts
"MI" : 16, # Michigan
"MN" : 10, # Minnesota
"MS" : 6, # Mississippi
"MO" : 10, # Missouri
"MT" : 3, # Montana
"NE" : 5, # Nebraska
"NV" : 6, # Nevada
"NH" : 4, # New Hampshire
"NJ" : 14, # New Jersey
"NM" : 5, # New Mexico
"NY" : 29, # New York
"NC" : 15, # North Carolina
"ND" : 3, # North Dakota
"OH" : 18, # Ohio
"OK" : 7, # Oklahoma
"OR" : 7, # Oregon
"PA" : 20, # Pennsylvania
"RI" : 4, # Rhode Island
"SC" : 9, # South Carolina
"SD" : 3, # South Dakota
"TN" : 11, # Tennessee
"TX" : 38, # Texas
"UT" : 6, # Utah
"VT" : 3, # Vermont
"VA" : 13, # Virginia
"WA" : 12, # Washington
"WV" : 5, # West Virginia
"WI" : 10, # Wisconsin
"WY" : 3 # Wyoming
}

STATE_LIST = sorted(list(STATE_VOTES.keys()))

私はそれを少しこのように見せようとしています サンプル

4

3 に答える 3

2

このようなものはどうですか:

STATE_LIST = sorted(STATE_VOTES)

def my_iter(iterable):
    for item in iterable:
        yield item

from itertools import izip_longest

s = ',\n'.join(', '.join(state for state in group if state) for
                        group in izip_longest(*[my_iter(STATE_LIST)]*7))

print s

出力:

AK, AL, AR, AZ, CA, CO, CT,
DC, DE, FL, GA, HI, IA, ID,
IL, IN, KS, KY, LA, MA, MD,
ME, MI, MN, MO, MS, MT, NC,
ND, NE, NH, NJ, NM, NV, NY,
OH, OK, OR, PA, RI, SC, SD,
TN, TX, UT, VA, VT, WA, WI,
WV, WY

この例ではizip_longest()itertoolsモジュールから使用しています。何らかの理由でその標準ライブラリの使用が許可されていない場合は、同等のソース コードがドキュメントにあります。

于 2012-11-06T23:25:51.327 に答える
0

この行で:

state = str(STATE_LIST)

リストを文字列に変換し、Pythonが使用するために選択した形式を受け入れます。この場合、文字列表現は次のようになります。

["AL", "AK", ..., "WY"]

改行はまったくありません。リストのように見える1つの長い文字列。

本当に必要な文字列は次のようになります。

AL AK AR AZ CO CT DC DE FL
GA HI ...
              ... WI WV WY

(各行に9個または10個のアイテムを配置したようです。これが、5行でどのように機能し、51個のアイテムがリストされるかはわかりませんが、柔軟にしましょう)

それを5行に分割したいとします。あなたはこのようなものでそれを行うことができます:

# Start with an empty list
state_lines = []

# Calculate the maximum number of items in each row
items_per_row = (len(STATE_LIST)+4)/5 # If you wanted, you could just say "11" here.

 # First item will be 0, 11, 22, etc.
 for first_item in range(0, len(STATE_LIST), items_per_row):

    # This contains all of the states for this line. For example,
    # ["AL", "AK", "AR", "AZ", "CO", "CT", "DC", "DE", FL", "GA", "HI"]
    states = STATE_LIST[first_item : first_item + items_per_row]

    # state_line will be a string of states separated by spaces,
    # like "AL AK AR AZ CO CT DC DE FL GA HI"
    state_line = ' '.join(states)

    # Add the new state line to the list
    state_lines.append(state_line)

# Finally, join the lines together with newlines in between them
state = '\n'.join(state_lines)

次に、state変数には、残りのコードに必要な文字列が含まれます。

于 2012-11-06T23:35:32.867 に答える
0

次のような簡単なことを試してみませんか。

>>> counter = 1
>>> for i in STATE_LIST:
...    sys.stdout.write(i+' ')
...    if not counter % 7:
...        print '\n'
...    counter += 1
... 
AK AL AR AZ CA CO CT 

DC DE FL GA HI IA ID 

IL IN KS KY LA MA MD 

ME MI MN MO MS MT NC 

ND NE NH NJ NM NV NY 

OH OK OR PA RI SC SD 

TN TX UT VA VT WA WI 

WV WY
于 2012-11-07T11:18:47.870 に答える