理解:从 PHP 数组到 Python?

Posted

技术标签:

【中文标题】理解:从 PHP 数组到 Python?【英文标题】:To understand: From PHP Array to Python? 【发布时间】:2010-12-19 09:24:15 【问题描述】:

这是 php 和其他编程语言中的常见任务。我从 PHP 开发人员转来。 我想确定这个系列。 任何擅长python的人请帮助我理解清楚。 这是我收集的 PHP 代码。

<?php
$php = array(1,2,3,4,5,6,7,8,9,10);
for ($i = 0; $i < 10 ; $i ++)
echo $php[$i]."<br>";
?>

=>Python 中有什么?

<?php

for ($i = 0; $i < 10 ; $i ++)
echo $php[$i] = $i +1 ;
?>

=>Python 中有什么?

<?php
$php = array(1,2,3,4,5,6,7,8,9,10);
foreach ($php as $value)
echo $value."<br>";
?>

=>Python 中有什么?

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) 
    $value = $value * 2;

// $arr is now array(2, 4, 6, 8)
?>

=>Python 中有什么?

<?php
$arr = array("mot"=>"one", "hai"=>"two","ba"=> "three");
foreach ($arr as $key => $value) 
    echo "Key: $key; Value: $value<br />\n";

?>

=>Python 中有什么?

<?php
$arr = array("one", "two","three");
while (list($key, $value) = each($arr)) 
    echo "Key: $key; Value: $value<br />\n";

?>

=>Python 中有什么?

<?php
$arr = array("one", "two","three");
while ($element = each($arr)) 
    echo "Key: $element['key']; Value: $element['value']<br />\n";

?>

=>Python 中有什么?

<?php
$products = array( array("ITL","INTEL","HARD"),
                        array("MIR", "MICROSOFT","SOFT"),
                        array("Py4C", "pythonkhmer.wordpress.com","TUTORIAL")
                         );
for ($row = 0; $row < 3; $row++)

    for ($col = 0; $col <3; $col++)
        
         echo "|".$products[$row][$col];
         
echo "<br>";

?>

=>Python 中有什么?

【问题讨论】:

不要试图将你的集合让我们称之为“模式”直接翻译成 Python,你可能会产生非常 [unpythonic][1] 的代码。相反,在你跳键盘之前,先花时间学习基本的 Python 数据结构。 [1]:faassen.n--tree.net/blog/view/weblog/2005/08/06/0 请注意,您可以使用 $php = range(1,10); 代替 $php = array(1,2,3,4,5,6,7,8,9,10);(实际上在 Python 中也是如此)。 @therefromhere:至少在 Python 中是 range(1,11),即上限为 n+1。 @python:你有什么理由不接受我的回答? :) @intgr 看起来他在博客上写了你的答案 【参考方案1】:

所有这些都非常明显。我只列出了 Pythonic 方法来做这些事情。更新:示例现在应该适用于 Python 2 和 Python 3。在 Python 2 中,您可以用 xrange() 代替 range(),用 iteritems() 代替 items() 以提高效率。

示例 1

PHP

$php = array(1,2,3,4,5,6,7,8,9,10);
for ($i = 0; $i < 10 ; $i ++)
echo $php[$i]."<br>";

Python(通常您迭代 Python 中的列表,而不是按索引访问):

lst = [1,2,3,4,5,6,7,8,9,10]
for item in lst:
    print(str(item) + "<br>")

示例 2

for ($i = 0; $i < 10 ; $i ++)
echo $php[$i] = $i +1 ;

Python:

lst = range(1, 11)
for item in lst:
    print(item)

或许:

lst = []
for i in range(10):
    lst.append(i + 1)
    print(lst[-1])     # prints out last element

示例 3

$php = array(1,2,3,4,5,6,7,8,9,10);
foreach ($php as $value)
echo $value."<br>";

与第一个相同

示例 4

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) 
    $value = $value * 2;

Python:

lst = [1, 2, 3, 4]
lst = [val * 2 for val in lst]

示例 5

$arr = array("mot"=>"one", "hai"=>"two","ba"=> "three");
foreach ($arr as $key => $value) 
    echo "Key: $key; Value: $value<br />\n";

Python(注意... 在 Python 中创建 dict [字典],而不是列表/):

dct = 'mot': 'one', 'hai': 'two', 'ba': 'three'
for key, value in dct.items():
    print("Key: %s; Value: %s<br />" % (key, value))

示例 6

$arr = array("one", "two","three");
while (list($key, $value) = each($arr)) 
    echo "Key: $key; Value: $value<br />\n";

Python:

lst = ['one', 'two', 'three']
for key, value in enumerate(lst):
    print("Key: %d; Value: %s<br />" % (key, value))

示例 7

$arr = array("one", "two","three");
while ($element = each($arr)) 
    echo "Key: $element['key']; Value: $element['value']<br />\n";

没有与此等效的直接 Python。

示例 8

$products = array( array("ITL","INTEL","HARD"),
                        array("MIR", "MICROSOFT","SOFT"),
                        array("Py4C", "pythonkhmer.wordpress.com","TUTORIAL")
                         );
for ($row = 0; $row < 3; $row++)

    for ($col = 0; $col <3; $col++)
    
        echo "|".$products[$row][$col];
    
    echo "<br>";

Python:

products = [['ITL', 'INTEL', 'HARD'],
    ['MIR', 'MICROSOFT', 'SOFT'],
    ['Py4C', 'pythonkhmer.wordpress.com', 'TUTORIAL']]

for product in products:
    for item in product:
        print('|' + item)
    print('<br>')

或者也许是更 Pythonic 的版本:

for product in products:
    print('|%s<br>' % ('|'.join(product)))

【讨论】:

如果第一个示例确实迭代整数,则在打印这些值时需要使用 str(item)。 这清楚地显示了 python 语法是如何不那么冗长,更清楚 php 恕我直言 我正在寻找这个想要的东西......谢谢ssssssssssssss PHP 中的关联数组和 Python 中的 dicts 之间的一个重要区别是 PHP 中的关联数组的顺序与您设置的一样,而 Python 的 dicts 的顺序是任意的,或者更确切地说,它们是简直是无序的。这与 PHP 非常棒的文档一起是我对 PHP 的怀念。否则我是一个快乐的 Python 新手。 @donut 从 Python 3.6 开始,dict 键现在可以保持顺序。但这是一个实现细节,不应依赖。【参考方案2】:

这个问题让我想起了一位智者说过,“给一个人一条鱼,你已经喂饱了他今天。教一个人钓鱼,你已经喂了他一辈子……”

【讨论】:

我认为这句话与这个问题无关。有可比较的例子是一个很好的学习工具。这就是所有这些——例子——提问者不希望我们为他解决他的问题。【参考方案3】:

“Python 中有什么?”,一个颇具哲学意味的问题,总是一个很好的开始一天的方式。我认为 Python 中的内容最好由 Python 之禅来回答(在交互式 shell 中键入 import this):

美胜于丑。 显式优于隐式。 简单胜于复杂。 复杂胜于复杂。 平面优于嵌套。 稀疏优于密集。 可读性很重要。 特殊情况不足以打破规则。 虽然实用胜过纯粹。 错误绝不应该悄无声息地过去。 除非明确静音。 面对模棱两可,拒绝猜测的诱惑。 应该有一种——最好只有一种——明显的方法。 虽然这种方式一开始可能并不明显,除非您是荷兰人。 现在总比没有好。 虽然从来没有比现在更好正确。 如果实现难以解释,那就是个坏主意。 如果实现易于解释,那可能是个好主意。 命名空间是一个非常棒的想法——让我们做更多这样的事情!

对不起,忍不住了。为了回答您要问的问题,我将您引导至Python documentation,特别是与lutz 链接的有关looping techniques 的部分。

除非文档中的语法完全让您感到困惑(尽管我对此表示怀疑),否则您将看到 Python 中如何定义循环。一旦你理解了这一点,你就会明白,从定义上讲,它们与你在 PHP 中习惯的循环有何不同(在语法上)。

还不满意?嗯...我想您应该再次阅读该教程。然后,回来提出可以产生具体答案的具体问题。对于这么广泛的问题,您找不到任何灵丹妙药。

【讨论】:

非常感谢。谢谢大家。我永远欢迎...:) +1:“然后,回来问一些具体的问题,可以得到具体的答案。”这确实是这个问题的问题。似乎作者没有意识到这是一个关于循环和数据结构如何在 Python 中工作的广泛主题,而不是一个具体问题。【参考方案4】:

您可以阅读the Python tutorial 中的循环介绍。

【讨论】:

谢谢Lutz。如果你能给我一个相应的代码(php->python)。我在这里发布的内容会很棒。 我学得很快。我暂时从php切换到python。谢谢。 如果你学得很快,看完 Python 教程应该可以自己回答问题了。 事实上。我现在正在阅读。当你发送给我时,谢谢。但是在这里人们有动力快速分享,当我阅读你的链接时。其他人很快就会理解..非常感谢 Lutz

以上是关于理解:从 PHP 数组到 Python?的主要内容,如果未能解决你的问题,请参考以下文章

列表理解(python)和数组理解(php)?

理解PHP数组的序列化和反序列化

从 php 执行的 python 脚本给出错误

Pytho怎样自学?

我为何从 Python 转向 Erlang

如何从python脚本将数组传递给php?