小编Ch3*_*teR的帖子

第二个较短的压缩 Python 生成器:如何检索静默消耗的元素

我想解析 2 个(可能)不同长度的生成器zip

for el1, el2 in zip(gen1, gen2):
    print(el1, el2)
Run Code Online (Sandbox Code Playgroud)

但是,如果gen2元素较少,gen1则“消耗”一个额外的元素。

例如,

def my_gen(n:int):
    for i in range(n):
        yield i

gen1 = my_gen(10)
gen2 = my_gen(8)

list(zip(gen1, gen2))  # Last tuple is (7, 7)
print(next(gen1))  # printed value is "9" => 8 is missing

gen1 = my_gen(8)
gen2 = my_gen(10)

list(zip(gen1, gen2))  # Last tuple is (7, 7)
print(next(gen2))  # printed value is "8" => OK
Run Code Online (Sandbox Code Playgroud)

显然,缺少一个值(8在我之前的示例中),因为在它意识到没有更多元素之前gen1被读取(从而生成值8) …

python zip generator python-itertools python-3.x

66
推荐指数
7
解决办法
4440
查看次数

函数和局部变量可以同名吗?

这是我的意思的一个例子:

def foo():
    foo = 5
    print(foo + 5)

foo()
# => 10
Run Code Online (Sandbox Code Playgroud)

该代码不会产生任何错误并且运行完美。这与变量和函数不应具有相同名称(除非覆盖它们)的想法相矛盾。为什么它有效?当应用于实际代码时,我应该使用不同的函数/局部变量名称,还是这完全没问题?

python scope

47
推荐指数
3
解决办法
6611
查看次数

std::integer_sequence 中是否允许枚举值?

此代码使用 GCC 13 和 Clang 17 可以正常编译和执行,但无法在 MSVC 上编译。我想知道代码是否需要按照标准工作,或者这是否是 MSVC 的问题。 演示

#include <utility>
#include <iostream>

enum e : int { A=5, B, C, D };

auto x = std::integer_sequence<e, A, B, C, D>{};
auto y = std::integer_sequence<unsigned, 9, 4, 3, 8>{};
auto z = std::integer_sequence<int, 0, 1, 2, 3>{};

template<typename T, T... ints>
void print_sequence(std::integer_sequence<T, ints...> int_seq)
{
    std::cout << "The sequence of size " << int_seq.size() << ": ";
    ((std::cout << ints << ' '), ...);
    std::cout << …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer c++14

22
推荐指数
2
解决办法
1413
查看次数

为什么这个关于字典的 Python 片段有效?

说我们有这个

>>> x = {'a': 1, 'b': 2}
>>> y = {}
>>> for k, y[k] in x.items(): pass
...
>>> y
{'a': 1, 'b': 2}
Run Code Online (Sandbox Code Playgroud)

为什么这有效?

注意:我第一次在这里看到这个

python dictionary

14
推荐指数
1
解决办法
416
查看次数

从 groupby 中的重复轴错误重新索引

by = "B" 块在 case1 和 case2 中都有重复的索引,

为什么 case1 可以工作,而 case2 不行。

情况1

df1 = pd.DataFrame({"a":[0,100,200],  "by":["A","B","B"]}, index=[0,1,1])
df1.groupby("by").diff()  
# result is okay
Run Code Online (Sandbox Code Playgroud)

案例2

df2 = pd.DataFrame({"a":[0,100,200],  "by":["C","B","B"]}, index=[0,1,1])
df2.groupby("by").diff()  
# throws ValueError: cannot reindex from a duplicate axis
Run Code Online (Sandbox Code Playgroud)

python pandas pandas-groupby

13
推荐指数
1
解决办法
387
查看次数

f 字符串格式:显示数字符号?

关于 python f 字符串的基本问题,但找不到答案:如何强制浮点数或整数的符号显示?即什么 f 字符串使3显示为+3

python string python-3.x f-string

12
推荐指数
2
解决办法
5617
查看次数

Pandas Dataframe 将多个键值拆分到不同的列

我有一个具有以下格式的数据框列:

col1    col2   
 A     [{'Id':42,'prices':['30',’78’]},{'Id': 44,'prices':['20','47',‘89’]}]
 B     [{'Id':47,'prices':['30',’78’]},{'Id':94,'prices':['20']},{'Id':84,'prices':['20','98']}]
Run Code Online (Sandbox Code Playgroud)

如何将其转换为以下内容?

col1    Id            price   
  A     42         ['30',’78’]
  A     44         ['20','47',‘89’]
  B     47         ['30',’78’]
  B     94         ['20']
  B     84         ['20','98']
Run Code Online (Sandbox Code Playgroud)

我正在考虑使用 apply 和 lambda 作为解决方案,但我不确定如何。

编辑:为了重新创建此数据框,我使用以下代码:

data = [['A', "[{'Id':42,'prices':['30','78']},{'Id': 44,'prices':['20','47','89']}]"], 
        ['B', "[{'Id':47,'prices':['30','78']},{'Id':94,'prices':['20']},{'Id':84,'prices':['20','98']}]"]] 

df = pd.DataFrame(data, columns = ['col1', 'col2'])
Run Code Online (Sandbox Code Playgroud)

python dataframe python-3.x pandas

9
推荐指数
1
解决办法
949
查看次数

如何从 Python 中的唯一列表访问下一个元素

我有一个清单Python

lst=['a', 'b', 'c', 'd', 'e', 'f']
Run Code Online (Sandbox Code Playgroud)

访问给定值的列表中的下一个元素的最佳方法是什么?

例如我想得到:

next_element(lst, 'c')
# 'd' should return adjacent value of 'c'
Run Code Online (Sandbox Code Playgroud)

Python 的做法是什么?

python list-comprehension list python-3.x

8
推荐指数
1
解决办法
3969
查看次数

删除二维数组中无序重复项的最省时方法是什么?

我已经生成了一个组合列表,使用itertools并得到如下所示的结果:

nums = [-5,5,4,-3,0,0,4,-2]
x = [x for x in set(itertools.combinations(nums, 4)) if sum(x)==target]
>>> x = [(-5, 5, 0, 4), (-5, 5, 4, 0), (5, 4, -3, -2), (5, -3, 4, -2)]
Run Code Online (Sandbox Code Playgroud)

删除无序重复项(例如x[0]x[1]是重复项)的时间复杂度最高的有效方法是什么。有没有内置的东西来处理这个问题?

我的一般方法是在一个元素中创建一个所有元素的计数器,然后与下一个元素进行比较。这会是最好的方法吗?

感谢您的任何指导。

python list set python-itertools python-3.x

7
推荐指数
1
解决办法
468
查看次数

如何删除pandas中具有不同列名的重复数据?

我有一个 DataFrame,其中的列具有不同名称的重复数据:

In[1]: df
Out[1]: 
  X1   X2  Y1   Y2
 0.0  0.0  6.0  6.0
 3.0  3.0  7.1  7.1
 7.6  7.6  1.2  1.2
Run Code Online (Sandbox Code Playgroud)

我知道 .drop(columns = ) 存在,但是有没有一种更有效的方法可以删除它们,而不必列出列名称?或不..请告诉我,因为我可以使用 .drop()

python unique dataframe pandas drop-duplicates

7
推荐指数
2
解决办法
2317
查看次数