Python 如果x!=';/';,这意味着什么:[x[1:]表示self.files中的x]

Python 如果x!=';/';,这意味着什么:[x[1:]表示self.files中的x],python,functional-programming,Python,Functional Programming,这意味着什么: [x[1:] for x in self.files if x != '/'] 如果可能的话,您是否介意用命令式等效语句解释它?它构造了一个新列表,其中的元素是变量self.files中的文件名片段,不包括根目录的文件名。每个片段由文件名中的n-1个字母组成,从第二个字母(字符串中的第二个字母的索引为1)到最后一个。 这段代码的命令式等价物将更加详细: lst = [] for x in self.files: if x != "/": lst.appe

这意味着什么:

[x[1:] for x in self.files if x != '/']
如果可能的话,您是否介意用命令式等效语句解释它?

它构造了一个新列表,其中的元素是变量
self.files
中的文件名片段,不包括根目录的文件名。每个片段由文件名中的
n-1个
字母组成,从第二个字母(字符串中的第二个字母的索引为1)到最后一个。
这段代码的命令式等价物将更加详细:

lst = []
for x in self.files:
    if x != "/":
        lst.append(x[1:])
同:

ret = []
for x in self.files:
    if x != '/':
        ret.append(x[1:])
return ret

让我们一步一步地看这个表达式。此部分返回当前对象中的文件列表:

self.files
现在,让我们迭代列表,依次调用
x
每个元素:

for x in self.files
<> P>但不要把它们全部拿来,让我们来考虑那些不被称为“代码>”/“<代码> >:

for x in self.files if x != '/'
对于通过筛选的每个文件,让我们删除文件名中的第一个字符:

x[1:] for x in self.files if x != '/'
最后,让我们将结果放在一个新列表中:

[x[1:] for x in self.files if x != '/']
仅供参考,我们刚才所做的叫做。正如@PasteBT和@aga所指出的,代码相当于这个显式循环:

ans = []                  # create a new empty list
for x in self.files:      # iterate over it, using x as variable
    if x != '/':          # if the element is not 'x'
        ans.append(x[1:]) # add it after removing 1st char

现在,
ans
将包含与列表理解返回的列表相同的列表。

先生,您是位绅士、学者和科学家。我会叫你el flamo blanco。谢谢你的帮助!我被删除第一个字符的步骤甩了,因为它只是一种坐在前面,没有任何迹象表明它在操作哪个处理步骤。而且我是函数式编程的高手。再次感谢!这个函数版本将是
map(lambda s:s[1:],filter(partial(ne,“/”),self.files))
。请注意,每个函数的输出仅依赖于其输入,并且没有副作用。你所拥有的只是一个简单的列表理解。啊,这不是一个功能性的“范例”,但它越来越近了!感谢这正是我想要的。结合以上步骤,我的jimmies就不再沙沙作响了。