【问题标题】:Naming lists dynamically in Python在 Python 中动态命名列表
【发布时间】:2013-06-26 12:12:36
【问题描述】:

正如标题所说,我正在尝试在 Python 中动态命名列表。该代码的目的是围绕连续字母创建列表。这是我的代码:

consecutive_duplicates=["a","a","a","a","b","c","c","a","a","d","e","e","e","e","X"]

count=0
name=0

for i in consecutive_duplicates:
    if consecutive_duplicates[count]==consecutive_duplicates[count+1] or
              consecutive_duplicates[count]==consecutive_duplicates[count-1]:
        consecutive_duplicates[name].append(i)
        count=count+1
    else:
        consecutive_duplicates[name+1].append(i)
        name=name+1

我不知道如何命名这些列表。显然,这不起作用。什么使它起作用?

我也无法定义动态列表。我该怎么做?

【问题讨论】:

  • 你期望的输出是什么?
  • 我的预期输出是一系列包含连续字母的列表。然后我会将它们变成一个列表。
  • 请将您的“问题”限制为每个帖子只有 1 个问题。还有——你考虑过使用字典吗?

标签: python dynamic naming


【解决方案1】:

你可以使用itertools.groupby:

>>> from itertools import groupby
>>> lis = ["a","a","a","a","b","c","c","a","a","d","e","e","e","e","X"]
>>> [list(g) for k,g in groupby(lis)]
[['a', 'a', 'a', 'a'], ['b'], ['c', 'c'], ['a', 'a'], ['d'], ['e', 'e', 'e', 'e'], ['X']]

与其创建动态变量,不如使用字典:

>>> dic = { 'lis'+str(i): list(g) for  i,(k,g) in enumerate(groupby(lis), 1)}
>>> dic['lis1']
['a', 'a', 'a', 'a']
>>> dic['lis2']
['b']

【讨论】:

    猜你喜欢
    • 2023-01-30
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    相关资源
    最近更新 更多