将python列表拆分为多个列表

时间:2012-12-14 01:54:17

标签: python

例如,如果我有一个类似的列表:

one = [1,2,3]

我可以使用什么函数或方法将每个元素拆分成各自独立的列表,如:

one = [1]

RANDOM_DYNAMIC_NAME = [2]

RANDOM_DYNAMIC_NAME_AGAIN = [3]

并且在任何给定时间,名为one unsplit 列表可能包含多个元素,其动态,并且此算法是我编码为自我的刽子手游戏所需的给作业。

需要算法来完成此示例目的:

pick a word: mississippi

guess a letter: s

['_','_','s','s','_','s','s','_','_','_','_']

这是我的代码:

http://pastebin.com/gcCZv67D

3 个答案:

答案 0 :(得分:4)

查看你的代码,如果你要解决的部分是第24-26行中的注释,那么你根本不需要动态创建的变量,事实上我甚至无法想象他们如何帮助你。

你有这个:

enum = [i for i,x in enumerate(letterlist) if x == word]

变量的名称非常令人困惑 - 称为word的是猜测字母,而你有一个不同的变量letterguess是其他东西,然后是一个名为{{1}的变量这就是整个词......但我认为我得到了你的目标。

letterenum中所有word指数的列表。例如,如果letterlistletterlist'letter'word,则为t

然后你这样做:

[2, 3]

所以现在bracketstrip = (str(w) for w in enum) bracketstrip。我不确定你为什么要那样。

['2', '3']

z = int(''.join(bracketstrip)) ''.join(bracketstrip),因此'23'z

23

现在你得到一个letterguess[z] = word ,因为你试图设置IndexError而不是设置letterguess[23]letterguess[2]

以下是我认为您想用以下内容替换它:

letterguess[3]

关于代码的其他部分的一些提示:

你有几个地方可以做这样的事情:

enum = [i for i,x in enumerate(letterlist) if x == word]
for i in enum:
    letterguess[i] = word

这与letterlist = [] for eachcharacter in letter: letterlist.append(eachcharacter) 相同。但实际上,你根本不需要那个清单。你做的唯一事情就是letterlist = list(letter),你可以用for i, x in enumerate(letterlist)完成同样的事情。你通常比自己更难为自己做事。确保您真正理解为什么编写每行代码。

“因为我无法以任何其他方式工作”并不是一个理由 - 你想要上班的?为什么你认为你需要letter个字母?没有人能够立即将所有这些决定置于脑海中。你拥有的技能越多,你的代码就越明显,它不需要评论,但你永远不会达到你不需要的程度。当你刚刚开始时,每当你弄清楚如何做某事时,添加一个评论,提醒自己你想要做什么,以及为什么它有效。您可以随时删除评论;你永远无法收到你没有写的评论。

答案 1 :(得分:0)

问题一,只是列表理解是好的。它会将每个元素作为单独的列表返回

[ [x,] for x in one ]

答案 2 :(得分:-1)

至于你的问题的字面答案,这里是你如何做到的,虽然我无法想象你为什么要这样做。通常,动态变量名称设计较差。您可能只需要一个列表或列表列表。

import random

for x in one:
    name = 'x' + str(random.getrandbits(10))
    globals()[name] = [x]