元组的Python元组:像二维数组一样访问

时间:2015-04-20 17:40:35

标签: python windows tuples

我的数据是字符串。我有一个for循环来捕获所有数据并放入元组。我使用元组的原因是,我希望能够访问这样的数据,

tupOfTuple[1][0:4]#accessing x=1(line 1), elements 0-4.

这是我目前的代码,

while (deltaT < 80):
    deltaT = time() - start_time
    buf = create_string_buffer("\x22\x0F\x61", 77)
    res = ldv_read( handle, buf, len(buf))
    dataStr = [""]
    colTup = ()

    if (res == 0):
        print "\n"
        resZeroCount = resZeroCount + 1
        for c in buf.raw:
            dataStr = hex(ord(c))[2:].zfill(2),
            #Figure out the data type, for debug
            #print type(dataStr)
            colTup = colTup + dataStr
        print 'adding the lines with data into a another tuple' 
        rowTup = rowTup + colTup

print 'final tuple, this is a tuple of tuples'
for item in rowTup:
        print item,


print 'line 3 is, element 0'
print rowTup[3][0]

在显示“print rowTup [1] [0]”的行中,我收到以下错误,

"IndexError: tuple index out of range".

我的rowTup应该是这样的,

18 23 43 srgrsdg 23 23 sdrfg
fd we 32 fgsfs   23 34 12

因此对于rowTup[1][0],我期待看到"fd"。这是在Win7上。有人可以告诉我这里我做错了什么吗?我应该尝试使用二维数组吗?

3 个答案:

答案 0 :(得分:1)

如果dataStr是元组,则可以通过

进行
colTup = colTup + (dataStr,)

答案 1 :(得分:1)

  

colTup = colTup + dataStr
  [...]
  rowTup = rowTup + colTup

当你将两个元组一起添加时,它会合并它们,它不会创建一个元组元组。如果rowTup是(1,2,3)并且colTup是(4,5,6),那么就像你一样将它们加在一起会产生一个具有值(1,2,3,4,5,6)的新元组,并使用这个新元组覆盖rowTup。

由于你如何将这些内容添加到一起,所有你拥有的只是一个巨大的项目元组,而不是多维的(也是你为什么会出现超出范围的错误)。

您可以通过将元组添加为单个元组来解决此问题并继续使用元组:rowTup = (rowTup,) + (colTup,)。但是,让我们一起丢弃元组。您将它们用于更适合列表的内容(主要是需要更改的数据)。

使用列表,使用append选项可以更轻松地获得所需的功能。它的行为是:

>>> a = []
>>> a.append(1)
>>> a.append(2)
>>> print(a)
[1, 2]
>>> b = []
>>> b.append(3)
>>> b.append(4)
>>> print(b)
[3, 4]
>>> c = []
>>> c.append(a)
>>> c.append(b)
>>> print(c)
[[1, 2], [3, 4]]

而且,你有一个多维列表。访问c[0]会返回[1, 2],并继续c[0][0]返回1

答案 2 :(得分:0)

你可以制作那种索引基础,但你可能希望用列表来做。这是因为元组是不可变的(无法更改),因此当您编写类似

的内容时,实际上您会复制所有以前的值
rowTup = rowTup + colTup
不要这样做。使用列表,您可以按

添加条目
a = []
a.append(1)
a.append(2)

产生一个列表[1,2]。

至于为什么它超出范围可以,正如我所看到的,只是因为其中一个循环在尝试执行rowTup [0]之前没有转到3(或0) [3]

编辑:也。作为次要的事情,你的一些印刷陈述应该是评论。你应该这样使用它们

# This is a comment for the coder (ie. yourself).
# Variable a is here set and printed.
a = 2
print "Hello program user. This is a message for you. a =", a

EDIT2:您可以在Python中轻松查看元组的内容。只需写下

print rowTup