2d数组结构python

时间:2013-02-11 03:30:25

标签: python multidimensional-array

我正在参加python课程并且没有python经验。教师只教授文档并拒绝提供代码示例。我理解C ++,但我对python感到非常沮丧,因为我基本上是在教自己。

我想打开一个文本文件,每行包含一个随机字符串。例如,长度可以是8,10,15或20个字符。它必须是灵活的。文本文件中可以有未指定数量的字符串(行)。

文本文件可能如下所示:

HGAMONIHRA
AOMOKAWONS
NFROLBOBDN
ARFSIHCAGE
LNIEEWONOK
GOLFUNDTHC
KOCATAOHBI
AMRERCGANH
SLGFAMALLC
ALLIGATORX

我只想弄清楚如何将每个char放在一个类似于数组的结构中,我可以像二维数组一样访问它 - >我的阵列[2] [3],例如。

我正在练习字典只是为了测试行为。我以为我可以使用带有嵌套for循环的字典,然后使用元组作为键,并将字符串中的解析字符作为值传递。我认为这可能有用,但是当我尝试使用一行来创建一个字典时,我的print语句只给了我一个键和一个值,而不是列表。我真的很困惑。我知道这是一种痛苦,但有人会用简单的语言教我吗?蟒蛇在嘴里留下了难闻的味道。

这是我对一行文本文件的测试代码:

count = 0
text = open("puzzle.txt")
line = text.readline()
for i in line:  #this is probably the problem
    mydict = dict()
    mydict.update({count:line[count-1]}) #was hoping to make many keys and values.
    count += 1

print mydict.values() #want to see there are multiple dict values, each as a char.
print count #just checking to see what count value was

有人可以教我,因为我的导师不会,我真的想学习。

3 个答案:

答案 0 :(得分:2)

Python字符串被视为不可变集(类似于元组),因此您只需要保存每行的一组字符串。

count = 0
text = open("puzzle.txt", 'r')
myLines = text.readlines()

#Usage;
print myLines[0][0]
# Prints the first character

因为python字符串是不可变的,所以需要将整个索引设置为新字符串

myLines[0] = mylines[0:1] + 'G' + myLines[2:]

答案 1 :(得分:2)

乍一看,您的代码有一个明显的问题 - 您每次通过循环时都会将mydict重置为空的dict:

    mydict = dict()

如果您移动了它,那么它就在循环之前,您可以进一步测试是否还有其他问题需要修复。

但是,有一种更简单的方法可以达到你想要的效果:

>>> with open("puzzle.txt") as f:
...     puzzle = [list(line.strip()) for line in f]

这将打开您的文件puzzle.txt并将其分配给变量f,然后将文件中的每一行读取到字符串变量line中,剥去任何空格(包括新行)结束),将结果字符串转换为字符列表,最后将每个列表收集到另一个列表中,该列表分配给变量puzzle。最后,因为所有这些都是在with语句中完成的,所以文件会自动关闭。

上面的代码中有几个重要的Python概念:

如果您在pprint模块中使用pprint函数,则可以更清楚地看到此代码的结果:

>>> from pprint import pprint
>>> pprint(puzzle)
[['H', 'G', 'A', 'M', 'O', 'N', 'I', 'H', 'R', 'A'],
 ['A', 'O', 'M', 'O', 'K', 'A', 'W', 'O', 'N', 'S'],
 ['N', 'F', 'R', 'O', 'L', 'B', 'O', 'B', 'D', 'N'],
 ['A', 'R', 'F', 'S', 'I', 'H', 'C', 'A', 'G', 'E'],
 ['L', 'N', 'I', 'E', 'E', 'W', 'O', 'N', 'O', 'K'],
 ['G', 'O', 'L', 'F', 'U', 'N', 'D', 'T', 'H', 'C'],
 ['K', 'O', 'C', 'A', 'T', 'A', 'O', 'H', 'B', 'I'],
 ['A', 'M', 'R', 'E', 'R', 'C', 'G', 'A', 'N', 'H'],
 ['S', 'L', 'G', 'F', 'A', 'M', 'A', 'L', 'L', 'C'],
 ['A', 'L', 'L', 'I', 'G', 'A', 'T', 'O', 'R', 'X']]

...您可以完全按照问题中的建议访问个人角色:

>>> puzzle[2][3]
'O'

答案 2 :(得分:1)

您可以使用列表列表来执行此操作:

>>> with open('puzzle.txt') as f:
...   a = [list(line.rstrip()) for line in f]
... 
>>> a[0,3]
>>> a[0][3]
'M'
>>> a[1][0]
'A'