相关疑难解决方法(0)

在python中跳过for循环的第一个条目?

在python中,我该怎么做:

for car in cars:
   # Skip first and last, do work for rest
Run Code Online (Sandbox Code Playgroud)

python

163
推荐指数
7
解决办法
16万
查看次数

Python字符串实习

虽然这个问题在实践中没有任何实际用途,但我很好奇Python如何进行字符串实习.我注意到以下内容.

>> "string" is "string"
>> True
Run Code Online (Sandbox Code Playgroud)

这是我所期待的.

你也可以这样做.

>> "strin"+"g" is "string"
>> True
Run Code Online (Sandbox Code Playgroud)

这非常聪明!

但你不能这样做.

>> s1 = "strin"
>> s2 = "string"
>> s1+"g" is s2
>> False
Run Code Online (Sandbox Code Playgroud)

为什么Python不会评估s1+"g",意识到它是相同的s1并指向同一个地址?在最后一个块中实际发生了什么让它返回False

python string internals

80
推荐指数
2
解决办法
1万
查看次数

如何迭代列表的前n个元素?

说我有一个列表,我想迭代n它们中的第一个.在Python中编写此代码的最佳方法是什么?

python list slice

48
推荐指数
3
解决办法
5万
查看次数

字符串切片是否在内存中执行复制?

我想知道是否:

a = "abcdef"
b = "def"
if a[3:] == b:
    print("something")
Run Code Online (Sandbox Code Playgroud)

实际上是否执行了a内存中某处“def”部分的副本,或者是否就地完成了字母检查?

注意:我说的是一个字符串,而不是一个列表(我知道答案)

python python-3.x

40
推荐指数
1
解决办法
2015
查看次数

用C++切片向量

[1:]在C++中有没有相当于Python 的列表切片与向量?我只想从矢量中获取除第一个元素之外的所有元素.

Python的列表切片运算符:

list1 = [1, 2, 3]
list2 = list1[1:]  

print(list2) # [2, 3]
Run Code Online (Sandbox Code Playgroud)

C++期望的结果:

std::vector<int> v1 = {1, 2, 3};
std::vector<int> v2;
v2 = v1[1:];

std::cout << v2 << std::endl;  //{2, 3}
Run Code Online (Sandbox Code Playgroud)

c++ vector

10
推荐指数
4
解决办法
9678
查看次数

如果Python切片复制引用,为什么我不能用它来修改原始列表?

我知道切片列表不会生成列表中对象的副本;它只是复制对它们的引用。

但如果是这样的话,那为什么这行不通呢?

l = [1, 2, 3]

# Attempting to modify the element at index 1
l[0:2][-1] = 10

# but the attempt fails. The original list is unchanged
l
> [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

不应该l[0:2][-1]指向原始列表索引 1 处的元素吗?

python reference list

6
推荐指数
1
解决办法
1902
查看次数

如果它是任何其他键中的子字符串,请删除字典键

我正在学习Python.我遇到了性能问题.对于单个字典,我想删除密钥if

  • a键是另一个键中的子字符串

如果,我不想删除密钥

  • 关键子串本身就是

我的密钥是唯一的字符串,大多数长度在3-50个字符之间.我正在使用的词典有100,000个或更多的项目,进行了数十亿次比较.由于这是一个O(n ^ 2)问题,我应该停止尝试优化此代码吗?还是有空间在这里取得进展?

字典是可取的,但我对其他类型开放.

例如:'hello'包含'he'和'ell'.我想在保持'你好'的同时删除'he'和'ell'键.我想在其他键的中间删除前缀,后缀和键子串.

密钥一个接一个地生成并添加到字典中.然后reduce_dict(dictionary)运行.我的假设是:在将它们添加到字典中时进行的测试与后面的函数测试一样慢,如下面的代码所示.

def reduce_dict(dictionary):
    reduced = dictionary.copy()
    for key in dictionary:
        for key2 in dictionary:
            if key != key2:
                if key2 in key:
                    reduced.pop(key2, 0)
    return reduced
Run Code Online (Sandbox Code Playgroud)

python performance dictionary

5
推荐指数
1
解决办法
1339
查看次数

Python 列表切片的空间复杂度

我很难理解 Python 列表切片的空间复杂性。

对于类似的东西

arr[2:] = arr[2:][::-1]
Run Code Online (Sandbox Code Playgroud)

是为切片分配了新空间(就像在字符串中完成的那样,因为它们是不可变的)还是在同一个数组上完成了操作?

对于类似的事情:

ans = [i+1 for i in range(n)]

for i in range(k):
    ans[i:] = ans[i:][::-1]
Run Code Online (Sandbox Code Playgroud)

空间复杂度会是多少?它会与 ans 是字符串时不同还是相同,例如ans = '12345...n'

python string list python-3.x

5
推荐指数
1
解决办法
4002
查看次数

itertools.count 和 itertools.islice 的意义是什么?

我看过在线课程,他们有如下示例:

from itertools import count
  
# creates a count iterator object
iterator =(count(start = 0, step = 2))
  
# prints an even list of integers
print("Even list:", 
      list(next(iterator) for _ in range(5)))
Run Code Online (Sandbox Code Playgroud)

...您可以使用range或 来编写np.arange。这是另一个例子:

# list containing some strings
my_list =["x", "y", "z"]
  
# count spits out integers for 
# each value in my list
for i in zip(count(start = 1, step = 1), my_list):
    print(i)
Run Code Online (Sandbox Code Playgroud)

...这基本上只是enumerate。所以我的问题是:您能否举一个使用 无法完成(或必须更加笨拙地完成)的itertools.count示例?itertools.islicerange

python python-itertools

2
推荐指数
1
解决办法
514
查看次数

如果切片复制引用了此行为,为什么?

根据,蟒蛇副本引用时切片。我尝试了以下方法:

>>> a=[1,2,3]
>>> b=a[:]
>>> b[1]=0
>>> a
[1, 2, 3]
>>> b
[1, 0, 3]
>>> map(id,a)
[14508376, 14508352, 14508328]
>>> map(id,b)
[14508376, 14508400, 14508328]
Run Code Online (Sandbox Code Playgroud)

为什么不b[1]=0改变a[1](如果b[1]确实是对同一个对象的引用,人们可能会想到这种情况)?相反,它似乎会生成一个新的引用/ id并更改新的对象。在哪里我可以更详细地阅读此行为?

python reference list slice

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