【问题标题】:Preserving concatenated elements in a Python str to list conversion将 Python str 中的连接元素保留为列表转换
【发布时间】:2023-04-02 04:29:01
【问题描述】:

我想知道是否有一种特殊的方法可以让我获取一个列表元素 (["3D"]),并使用 for 循环将其嵌套在另一个列表 ([["3D"]]) 中,同时避免当前的类型转换我遇到的问题导致[["3","D"]]

为清楚起见,我已包含以下内容;

hand = ["3D", "4D", "4C", "5D", "JS", "JC"]

from itertools import groupby 

def generate_plays(hand):
    plays = []
    for rank,suit in groupby(hand, lambda f: f[0]):
        plays.append(list(suit))
    for card in hand:
        if card not in plays:       #redundant due to list nesting
            plays.append(list(card))       #problematic code in question
    return plays

输出:

[['3D'], ['4D', '4C'], ['5D'], ['JS', 'JC'], ['3', 'D'], ['4', 'D'], ['4', 'C'], ['5', 'D'], ['J', 'S'], ['J', 'C']]

预期输出:

[['3D'], ['4D', '4C'], ['5D'], ['JS', 'JC'], ['4D'], ['4C'], ['5D'], ['JS'], ['JC']]

重申一下,这里的目的是在 for 循环中保持卡片元素的连接性。

非常感谢。

附:对于那些有兴趣的人,它是一个纸牌游戏的游戏生成器,可以玩单张纸牌和 2+ 个数字

【问题讨论】:

  • 您能否将卡片存储为元组以避免这种情况?
  • 可以简化创建列表playsfrom operator import itemgetterplays = [list(suit) for rank,suit in groupby(hand, itemgetter(0))]

标签:
python
string
list
type-conversion