0

複数のリストがあるとしましょう:

A = [1]
B = [3, 2]
C = [5, 1, 6]
D = [7, 4, 18]

リストの長さを比較し、4 つのリストの中で最も長いリストを出力したい。したがって、この場合、出力は次のようになります。

A, D contain the longest list(s). 

1つ1つ比較しようと思ったのですが、なかなか忙しくて書き出すのが非効率です。ユーザー定義関数を使用してこれを行う方法はありますか?

私はまだpythonに慣れていないので、脳死にしています...

def fishing():
    global target_counter
    target_counter = pHands_new[target].count(target_rank)
    global card_counter

    if target_counter >0:
        for i in range(target_counter):
            pHands_new[target].remove(target_rank)
        for i in range(target_counter):
            pHands_new[N].append(target_rank)
        print "*"*70
        print "HIT:", target_counter, "card(s) transferred"
        print "*"*70
        card_counter = pHands_new[N].count(target_rank)
        if card_counter ==4:
            for i in range(card_counter):
                pHands_new[N].remove(target_rank)
            pBooks(N)
    else:
        draw = GetTopCard(sDeck_new)
        if draw == target_rank:
            pHands_new[N].append(draw)
            print "HIT: LUCKILY, You fished up the rank <"+draw+">"
            card_counter = pHands_new[N].count(draw)
            if card_counter ==4:
                for i in range(card_counter):
                    pHands_new[N].remove(draw)
                pBooks(N)

        elif draw != target_rank:
            pHands_new[N].append(draw)
            print "MISS: You fished up the rank <"+draw+">"
            card_counter = pHands_new[N].count(draw)
            if card_counter ==4:
                for i in range(card_counter):
                    pHands_new[N].remove(draw)
                pBooks(N)

def pBooks(player):
        books[player].append(target_rank)

ノート:

-pHands_new はネストされたリストで、pHands_new 内に 4 つのリストがあります。

-Nは現在のプレーヤーです

-target_rank は、他のプレイヤーのターゲットになっているカードです。

-Books は別のネストされたリストです。プレイヤーが同じカード/ランクを 4 枚持っている場合、それはプレイヤーの手札から取り除かれ、本に置かれます。

ここで比較しているリストは本[0] ....本[3]です

4

1 に答える 1

0
>>> a = [1]
>>> b = [3, 2]
>>> c = [5, 1, 6]
>>> d = [7, 4, 18]
>>>
>>> max_len = len(max([a,b,c,d], key=len)) # max(map(len, [a,b,c,d]))
>>> lists = {
...     'a': a,
...     'b': b,
...     'c': c,
...     'd': d,
... }
>>> names = [name for name in lists if len(lists[name]) == max_len]
>>> print '{} contain the longest list(s).'.format(', '.join(names))
c, d contain the longest list(s).

>>> a = [1, 2, 3, 4]
>>> b = [3, 2]
>>> c = [5, 1, 6]
>>> d = [7, 4, 18]
>>> 
>>> max_len = len(max([a,b,c,d], key=len)) # max(map(len, [a,b,c,d]))
>>> lists = {
...     'a': a,
...     'b': b,
...     'c': c,
...     'd': d,
... }
>>> names = [name for name in lists if len(lists[name]) == max_len]
>>> print '{} contain the longest list(s).'.format(', '.join(names))
a contain the longest list(s).

books = [
    [1],
    [3, 2],
    [5, 1, 6],
    [7, 4, 18],
]

max_len = len(max(books, key=len)) # max(map(len, books))
names = [str(i+1) for i, bs in enumerate(books) if len(bs) == max_len]
print 'Book {} contain the longest list(s).'.format(', '.join(names))

# => Book 3, 4 contain the longest list(s).
于 2013-07-27T04:22:39.103 に答える