Perl 相当于 Python for 循环?

Posted

技术标签:

【中文标题】Perl 相当于 Python for 循环?【英文标题】:Perl equivalent of Python for loop? 【发布时间】:2021-10-08 00:12:29 【问题描述】:

是否有与以下 Python 代码等效的 Perl?

names['name'] = ['Bob', 'Bill', 'Terry']
obj = 'Students': [ 'Names': name for name in names['name']]

这最终会看起来像这样

编辑: 正如 Tim Roberts 指出的那样:结果应该是这样的

[ 'Names': "Bob" , "Names": "Bill" ,. "Names": "Terry" ]

我见过 Perl one 做不同的事情,但不是这个。

【问题讨论】:

您的 Python 所做的事情与预期的结果大不相同。 等一下,这是一个有用的结果,但这不是您的代码会产生的结果。你会产生一个完整的列表字典,每个字典都有一个元素:[ 'Names': "Bob" , "Names": "Bill" ,. "Names": "Terry" ] 请显示完整的输入、工作代码和预期输出,以及您的翻译尝试。你被困在哪里了?如果您使用 Python,请正确标注。 objarr 不是你想象的那样。我推荐arr => dctobj => result_dct 或类似的东西。 【参考方案1】:

您希望 a map 在您的数据结构中。它不是单行的。这只是普通的代码。

my $obj = 
  'Students' => [
    map  'Names' => $_ , @ $namesname 
  ]
;

我使用了表达式形式 map (map EXPR, LIST),在要评估的表达式后面加上逗号 (,)。花括号 () 是哈希引用构造函数。或者,您可以使用块形式 (map BLOCK LIST),它会有一对额外的花括号。

    map   'Names' => $_    @ $namesname 

如果你想要一个普通的哈希而不是引用,像这样替换。

my %obj = (
# ...
);

【讨论】:

请注意,arr 在 Perl 中是一个哈希,因为它是关联的——就像它在 Python 中作为一个字典一样。 不确定 OP 是否会关心这种区别,但也有 my %obj = ( ... ) 而不是 my $obj = ... ,具体取决于您想要哈希还是哈希引用。 $arrname 是一个标量。要将正确的 LIST 传递给 map,请使用 @$arrname “注意 arr 将是 Perl 中的哈希”:问题可能已被编辑,现在不再提及 arr.. 所以这个答案令人困惑 arr 更改为 names 以匹配 OP 中的更改【参考方案2】:

这是另一种方法:

use Data::Dumper;
my @names = ('Bob', 'Bill', 'Terry');

my %out_dict;

my @students_dict = ();
foreach my $name (@names) 
    push(@students_dict, 'Names' => $name);


$out_dict'Students' = \@students_dict;
print Dumper \%out_dict;

输出:

$VAR1 = 
          'Students' => [
                          
                            'Names' => 'Bob'
                          ,
                          
                            'Names' => 'Bill'
                          ,
                          
                            'Names' => 'Terry'
                          
                        ]
        ;

【讨论】:

以上是关于Perl 相当于 Python for 循环?的主要内容,如果未能解决你的问题,请参考以下文章

perl 语言循环语法太灵活

Python 相当于 Java 的标准 for 循环是啥?

Python中For循环

Python相当于在Matlab中分配给一个数组(在for循环内)

Perl - 在for循环中验证参数的问题

《Python学习之路 -- Python基础之迭代器及for循环工作原理》