要理解:从PHP数组到Python?

kn3*_*n3l 13 php python arrays loops

这是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>";
?>
Run Code Online (Sandbox Code Playgroud)

=>什么是Python?

<?php

for ($i = 0; $i < 10 ; $i ++)
echo $php[$i] = $i +1 ;
?>
Run Code Online (Sandbox Code Playgroud)

=>什么是Python?

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

=>什么是Python?

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
?>
Run Code Online (Sandbox Code Playgroud)

=>什么是Python?

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

=>什么是Python?

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

=>什么是Python?

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

=>什么是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>";
}
?>
Run Code Online (Sandbox Code Playgroud)

=>什么是Python?

int*_*tgr 26

所有这些都非常明显.我只列出了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>";
Run Code Online (Sandbox Code Playgroud)

Python(通常在Python中迭代列表,而不是通过索引访问):

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

例2

for ($i = 0; $i < 10 ; $i ++)
echo $php[$i] = $i +1 ;
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

lst = range(1, 11)
for item in lst:
    print(item)
Run Code Online (Sandbox Code Playgroud)

或者可能:

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

例3

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

与第1相同

例4

$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

lst = [1, 2, 3, 4]
lst = [val * 2 for val in lst]
Run Code Online (Sandbox Code Playgroud)

例5

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

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

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

例6

$arr = array("one", "two","three");
while (list($key, $value) = each($arr)) {
    echo "Key: $key; Value: $value<br />\n";
}
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

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

例7

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

没有直接的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>";
}
Run Code Online (Sandbox Code Playgroud)

蟒蛇:

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

for product in products:
    for item in product:
        print('|' + item)
    print('<br>')
Run Code Online (Sandbox Code Playgroud)

或者更像Pythonic版本:

for product in products:
    print('|%s<br>' % ('|'.join(product)))
Run Code Online (Sandbox Code Playgroud)

  • 这清楚地表明了如何python语法更简洁,更清晰的PHP恕我直言 (6认同)
  • PHP中的关联数组和Python中的dicts之间的一个重要区别是,PHP中的关联数组的顺序与设置它的顺序相反,而使用Python的顺序,它们的顺序是任意的,或者说,它们只是无序的.这与PHP的完全令人敬畏的文档是我想念的PHP.否则我是一个快乐的Python新手. (4认同)

Miz*_*zor 10

"Python中的内容是什么?",这是一个非常哲学的问题,总是开始一天的好方法.我认为是在 Python可以最好的Python的禅(类型回答import this在一个交互的shell):

  • 美丽胜过丑陋.
  • 显式优于隐式.
  • 简单比复杂更好.
  • 复杂比复杂更好.
  • Flat优于嵌套.
  • 稀疏优于密集.
  • 可读性很重要.
  • 特殊情况不足以打破规则.
  • 虽然实用性胜过纯洁.
  • 错误不应该默默地传递.
  • 除非明确沉默.
  • 面对模棱两可,拒绝猜测的诱惑.
  • 应该有一个 - 最好只有一个 - 明显的方法来做到这一点.
  • 虽然这种方式起初可能并不明显,除非你是荷兰人.
  • 现在比永远好.
  • 虽然从未往往比好正确的现在.
  • 如果实施很难解释,这是一个坏主意.
  • 如果实现很容易解释,那可能是个好主意.
  • 命名空间是一个很棒的主意 - 让我们做更多的事情吧!

对不起,忍不住了.要回答您想要提出的问题,我将引导您阅读Python文档,特别是关于由lutz链接的循环技术的部分.

除非文档中的语法设法让您完全混淆(尽管我对此表示怀疑),否则您将看到如何在Python中定义循环.一旦你理解了这一点,根据定义,你将理解它们(在语法上)与你在PHP中习惯的循环的区别.

仍然不满意?嗯......我想你应该再次阅读教程.然后,回过头来询问可能产生具体答案的具体问题.对于这个问题,你不会发现任何银子弹.

  • +1:"然后,回过头来询问可能产生具体答案的具体问题." 这确实是这个问题的问题.似乎作者没有意识到这是关于循环和数据结构如何在Python中工作的广泛主题,而不是特定问题. (2认同)