如果这是其他地方的问题,我很抱歉.通过谷歌和Stackforum搜索我没有找到任何可以推断出答案的内容; 但我觉得那部分就是我.
我正在尝试将lambdas作为一个概念,作为其中的一部分,我正在寻找使用它的方法.
所以,如果从功能的角度来看这是一个非常愚蠢的关于lambda的事情,请随时让我知道并解释.但无论哪种方式,我仍然想知道答案/仍然想知道如何用python语言做到这一点.
因此,出于测试目的,我有:
my_test = 'test_name'
testlist = ['test_name', 'test_name_dup', 'test_name_dup_1', 'test_name_dup_3']
Run Code Online (Sandbox Code Playgroud)
我正在寻找使用lambda创建一个循环的函数,并返回不在testlist中的第一个test_name_#.该功能最终将应用于文件名,但出于测试目的,我不得不远离实际读取文件名 - 给了我太多方法来搞砸了.
但my_test必须能够更改,测试列表将是文件路径列表.
所以,我正在寻找一个像以下的功能:
new_name = lambda x: my_test + '_' + str(x)
Run Code Online (Sandbox Code Playgroud)
但是初始值应该是x = 1,并且它应该继续,直到new_name不在testlist中.似乎:
bool(new_name not in testlist)
Run Code Online (Sandbox Code Playgroud)
可能是有用的东西.
但我无法想出一种方法将初始x设置为1,并使用(x + 1)循环直到bool为真.
我知道这是可能的,因为我发现一些CRAZY lambda示例循环遍历文件中的行.我只是无法理解它们(并且没有任何方式可以与它们一起玩,因为它们处理的是编程级别之外的事情.
在相关的说明中,我可以在此循环的开头添加值吗?(即我可以检查test_name,然后检查test_name_dup,然后检查test_name_dup_#)?
在此先感谢您的帮助!Lambdas(虽然非常酷)完全弄乱了我的脑袋.
我正在使用一个数据集,其中包含数万个可变长度的位串,最高可达32768.
数据源自一个列表,然后我将其连接成多个二进制位串,然后将其转换为INT.
为了演示我的方法:
import array
a = array.array('B', [4,5,13,4,4,9,12,13])
d = dict()
for i in set(a):
d[i] = int('0b' + ''.join([str(int(i is b)) for b in a]), 2)
print d
Run Code Online (Sandbox Code Playgroud)
我的问题是:有没有一种更有效的方法来实现这一点,而不构造一个~32000长度的字符串,然后添加'0b'将其转换为INT?(我假设除了操作的源列表之外,我的方法至少使用了32000个字节)
另外,INT是最便宜的存储方式,假设我希望以允许逐位操作的形式存储它们吗?