-4

また、

people = ['ポール', 'フランソワ', 'アンドリュー', 'スー', 'スティーブ', 'アーノルド', 'トム', 'ダニー', 'ニック', 'アンナ', 'ダン', 'ダイアン' 、「ミシェル」、「ジャーミー」、「カレン」]

チーム数 = 4

L には、0,1,2,3,0,1,2,3 形式の要素インデックスを含む 4 つのサブリストが含まれている必要があります

 def form teams(people, num_teams):

   '''make num_teams teams out of the names in list people by counting off. people in a list of people's name(strs) and num_teams(an int >= 1) is the desired
   number of teams. Return a list of lists of names, each sublist representing a team.'''

 L= []
# Make an outer list
 for i in range(num_teams):
       L.append([])
# make an i th number of sublist according to the range

for team in range(num_teams) #in this case 0,1,2,3
      for i in range(0, len(people), num_teams) #start from 0 to len(people) which in this case is 15 and  by taking 0,1,2,3, steps 
          if (team + i) < len(people): <---??????
               L[team].append(people[team+i]) <---??????

 return L
 print(L)

 [['paul', 'steve', 'nick', 'michelle'],['francois','arnold','anna','jeremy'],     ['andrew','tom','dan','karen'],['sue','danny','diane']

誰かが私が配置したものを説明してもらえますか? その上で、概念を正しく理解していますか?

4

1 に答える 1

0

あなたが達成しようとしていることはよくわかりませんが、おそらくこれはあなたの目的に役立ちます:

print ( [ [x for i, x in enumerate (people) if i % num_teams == y] for y in range (num_teams) ] )

people 配列と num_teams = 4 を使用すると、次のように出力されます。

[['paul', 'steve', 'nick', 'michelle'], ['francois', 'arnold', 'anna', 'jermy'], ['andrew', 'tom', 'dan', 'karen'], ['sue', 'danny', 'diane']]

num_teams = 3 の場合、出力は次のようになります。

[['paul', 'sue', 'tom', 'anna', 'michelle'], ['francois', 'steve', 'danny', 'dan', 'jermy'], ['andrew', 'arnold', 'nick', 'diane', 'karen']]

.

編集: 6 つの疑問符

疑問符でマークされた最初の行は、次の likeが失敗しないことを確認するためにteam + i、リストの境界内にあるかどうかを確認します。peoplepeople[team+i]

疑問符でマークされた 2 行目は、リストの位置にある要素を対応するチームのリストに追加しteam+iますpeople。num_teams 幅のステップを踏むと、最初のチーム (インデックス 0) に入り、0 番目、num_teams-th、2num_teams-th などの人、2 番目のチーム (インデックス 1) で 1 番目、(num_teams+1 )-th、(2num_teams+1)-the など、すべてのチームについて。

ただし、このコードは使用しないでください。それは物事を過度に複雑にします。投稿したコードの機能全体をより明確に表現できます。

.

編集2:

人間として適用するアルゴリズムは、すべての人を一列に並べて、0 1 2 3 0 1 2 3 0 ... を数えて前を通過することです (既に述べたように)。これを次のように表現的に実装できます。

def makeTeams (people, teamCount):
    teams = []
    for i in range (teamCount): teams.append ( [] )

    #You can write the above two lines as this: teams = [ [] for x in range (teamCount) ]

    curTeam = 0
    #Now walk past the line of people:
    for person in people:
        #Add person to current team
        teams [curTeam].append (person)
        #Add 1 to the team index
        curTeam += 1
        #If you have counted too far, set the current Team to 0
        if curTeam == teamCount: curTeam = 0
        #The two lines above, can be written as curTeam = (curTeam + 1) % teamCount

    return teams

または、Python のジェネレーター (Python の強み) を利用します。

makeTeams = lambda people, teamCount: [ [person for i, person in enumerate (people) if i % teamCount == team] for team in range (teamCount) ]
于 2012-12-11T01:59:20.230 に答える