Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不使用库的python中操作多维数组?_Python - Fatal编程技术网

如何在不使用库的python中操作多维数组?

如何在不使用库的python中操作多维数组?,python,Python,我有这个方法: def encode(message, rails): result = "" dataRails = [] activeRail = 0 # allocate multi-dimensional array...seems inefficient for r in range(rails): dataRails.append([]) # copy characters from message into one

我有这个方法:

def encode(message, rails):
    result = ""
    dataRails = []
    activeRail = 0
    # allocate multi-dimensional array...seems inefficient
    for r in range(rails):
        dataRails.append([])

    # copy characters from message into one of the arrays, or .
    for m in message:
        count = 0
        # for each rail either give it the character or a .
        while count <= rails:
            print("Count: ", str(count), " Active Rail:", str(activeRail))
            if activeRail == count:
                dataRails[activeRail][count] = m
            else:
                dataRails[activeRail][count] = "."
            count += 1

        activeRail += 1
        if activeRail >= rails:
            activeRail = 0

    for r in dataRails:
        print(r)
    # ill calculate result once I get the above right    
    return result
在本例中,我希望将dataRails分配为2个元素,每个元素的长度与输入消息的长度相同。我将用message中的字母或“.”替换数组中的元素

但是,使用循环分配dataRails似乎效率很低

当我运行此操作时,会出现以下错误:

dataRails[activeRail][count] = m
IndexError: list assignment index out of range
print语句看起来像有效的索引值:

Count:  0  Active Rail: 0
感觉我的多维数组有两个问题。1) 分配和2)访问

如果有重复的问题,请发布链接。我搜索了一下。似乎相关的答案依赖于我不想使用的图书馆。我刚刚开始学习python,希望学习python的基础知识,而不是使用库

数组在python中真的有那么难吗?还是我让它变得比我需要的更难

谢谢 马特

编辑
最终,如果消息输入是“WE ARE DIS”,则此方法的返回将是“WEERDSAI”。我正在完成一个关于的教程。我还没有完成这个方法。我被我定义的数组卡住了。

我建议您保留一个字符串列表,而不是多维列表。只是几个简单的更改:

# Initialize empty rails
dataRails = [""] * rails
...
        if activeRail == count:
            dataRails[activeRail] += m
        else:
            dataRails[activeRail] += '.'
我用“我们是Dis”测试:

现在您可以处理删除非字母和正确反转方向的问题。
现在可以吗?

您能显示一些所需的输入/输出吗?对于多维数组,您可以这样做:
dataRails=[[]For uuin-range(rails)]
首先,您要处理的是列表。数组是一种独立的数据类型,不能动态更改大小。但是,即使使用列表,您也无法访问超出列表大小的元素,因此您可能会将赋值更改为
。apppend(m)
为什么这是预期的输出?对于循环,您使用了
while
和计数器,而不是
,对一个变量进行了多次检查,并完全跳过了字符串切片。一个简单的凯撒密码会短得多,所以我不确定你想要实现什么;示例中重复的字母太多,无法直观地显示。@Prune的目的是实现围栏密码,而不是Caesar密码。凯撒密码可能更简单,但这不是练习。我确实简化了这个例子。希望这能有所帮助。然而,这篇文章的目的并不是为我解决这个问题。目的是帮助我修复数组操作。明白了;密码的名字足以作为线索。您只需要一个字符串数组,每个轨道一个字符串。上面的
append
注释应该会让您进入下一组问题。:-)是的,这很清楚。我把数据结构复杂化了。非常感谢。
# Initialize empty rails
dataRails = [""] * rails
...
        if activeRail == count:
            dataRails[activeRail] += m
        else:
            dataRails[activeRail] += '.'
W...A... ...s...
.e...r...D..
.. ...e...i.