在下面的方法定义,什么是*和**为做param2?
def foo(param1, *param2):
def bar(param1, **param2):
Run Code Online (Sandbox Code Playgroud) python syntax parameter-passing variadic-functions argument-unpacking
是否有理由更喜欢使用map()超过列表理解,反之亦然?它们中的任何一个通常比另一个更有效或被认为是更加pythonic?
我有一个2项元组的列表,我想将它们转换为2个列表,其中第一个包含每个元组中的第一个项目,第二个列表包含第二个项目.
例如:
original = [('a', 1), ('b', 2), ('c', 3), ('d', 4)]
# and I want to become...
result = (['a', 'b', 'c', 'd'], [1, 2, 3, 4])
Run Code Online (Sandbox Code Playgroud)
是否有内置函数可以做到这一点?
从字符串列表开始.每个字符串将具有相同数量的字符,但该数字不是预定的,也不是不相关的字符串总数.
这是一个例子:
data = ['ABC', 'EFG', 'IJK', 'MNO']
Run Code Online (Sandbox Code Playgroud)
我想要的最终输出是这样的:
[('A', 'E', 'I', 'M'), ('B', 'F', 'J', 'N'), ('C', 'G', 'K', 'O')]
Run Code Online (Sandbox Code Playgroud)
我想要的输出是我在以zip()某种方式使用后期望看到的.我的问题是我找不到将一个数组的每个元素压缩在一起的正确方法.
基本上,我试图从一组行中获取列.
到目前为止我尝试了什么:
将数据拆分为二维列表:
split_data = [list(row) for row in rows]
这给了我:
[['A', 'B', 'C'], ['E', 'F', 'G'], ['I', 'J', 'K'], ['M', 'N', 'O']]
Run Code Online (Sandbox Code Playgroud)
尝试使用以下zip()内容:
zip(split_data)
我继续这样做:
[(['A', 'B', 'C'],), (['E', 'F', 'G'],), (['I', 'J', 'K'],), (['M', 'N', 'O'],)]
Run Code Online (Sandbox Code Playgroud)
显然,它没有任何东西压缩每个元素,导致它返回带有空白的原始数据.我怎样才能zip()考虑应该压缩的每个元素data或split_data列表?
我需要的是 zip(data[0], data[1], data[2], ...)
是否可以使用C++ Range-v3库解压缩先前压缩的向量?我希望它的行为类似于Haskell的解压缩函数或Python的zip(*list).
例如,当按照另一个向量的值对向量进行排序时,这将是方便的:
using namespace ranges;
std::vector<std::string> names {"john", "bob", "alice"};
std::vector<int> ages {32, 19, 35};
// zip names and ages
auto zipped = view::zip(names, ages);
// sort the zip by age
sort(zipped, [](auto &&a, auto &&b) {
return std::get<1>(a) < std::get<1>(b);
});
// put the sorted names back into the original vector
std::tie(names, std::ignore) = unzip(zipped);
Run Code Online (Sandbox Code Playgroud) 在python2.7中,下面的代码获取字典fd(在此示例中表示单词及其计数的频率分布),并将其分为两个列表的列表:[[keys],[values]]:
sortedDKandVs = [zip(*sorted(fd.items(), key=itemgetter(1), reverse=True))] #[word,word,...],[count,count]
Run Code Online (Sandbox Code Playgroud)
我可以做,例如:
keys = sortedDKandVs[0]
values = sortedDKandVs[1]
Run Code Online (Sandbox Code Playgroud)
这不再适用于Python3,我想知道如何转换代码.
这里没有答案如何将元组列表解压缩到单个列表中?因为在Python3中,zip对象返回迭代器而不是列表,但是我不知道如何转换答案.
我有两个清单:
X=[[1,2,3],[5,5],[1]]
Y=[[2,4],[1,4,6,6],[1,3]]
Run Code Online (Sandbox Code Playgroud)
列表X和Y的元素之间存在一对一的对应关系.我想按项目的长度对X的元素进行排序,同时Y的项目按照新的索引排序在正确的位置. X的项目.
结果应该是:
X=[[1],[5,5],[1,2,3]]
Y=[[1,3],[1,4,6,6],[2,4]]
Run Code Online (Sandbox Code Playgroud) 如果我有两个空列表,并且我想用同一对象中的所有“a”和“b”填充它们,我可以做一些类似的事情:
a, b = [foo.a, foo.b for foo in foo]
因为目前我将它们分成两个单独的列表理解。
a = [foo.a for foo in foo]
b = [foo.b for foo in foo]
所以我想知道是否可以以某种方式将它们合并为一行和一个论点。
python ×6
sorting ×2
boost-range ×1
c++11 ×1
list ×1
map-function ×1
matrix ×1
python-3.x ×1
range-v3 ×1
syntax ×1
transpose ×1