Peter Norvig 通过结合确定性逻辑运算和可能解决方案的智能遍历,撰写了一篇描述解决数独难题的程序的文章,即使是最困难的难题.后者是递归完成的; 这是该功能(来源):
def search(values):
"Using depth-first search and propagation, try all possible values."
if values is False:
return False ## Failed earlier
if all( len( values[s]) == 1 for s in squares):
return values ## Solved!
## Chose the unfilled square s with the fewest possibilities
_,s = min( (len( values[s]), s)
for s in squares
if len(values[s]) > 1
)
return some( search( assign( values.copy(), s, d))
for d …Run Code Online (Sandbox Code Playgroud) 我对列表索引很生气,无法解释我做错了什么.
我有这段代码,我想在其中创建一个列表列表,每个列表包含相同电路参数(电压,电流等)的值,我正在从一个csv看起来像这样的文件中读取:
Sample, V1, I1, V2, I2
0, 3, 0.01, 3, 0.02
1, 3, 0.01, 3, 0.03
Run Code Online (Sandbox Code Playgroud)
等等.我想要的是以[[V1],[I1]]的形式创建一个列表,例如包含V1和I1(但我想以交互方式选择),所以:
[[3,3], [0.01, 0.01]]
Run Code Online (Sandbox Code Playgroud)
我正在使用的代码是这样的:
plot_data = [[]]*len(positions)
for row in reader:
for place in range(len(positions)):
value = float(row[positions[place]])
plot_data[place].append(value)
Run Code Online (Sandbox Code Playgroud)
plot_data是包含所有值的列表,而是包含positions我要从.csv文件中复制的列的索引的列表.问题是,如果我尝试在外壳的命令,似乎工作,但如果我运行的脚本,而不是附加的每个值到适当的子列表,它附加到所有列表的所有值,所以我得到2(或更多)相同的清单.
通过Peter Norvig的解决每一个数独拼图文章,我遇到了一些我以前从未见过的Python习语.
我知道函数可以返回一个元组/值列表,在这种情况下,您可以为结果分配多个变量,例如
def f():
return 1,2
a, b = f()
Run Code Online (Sandbox Code Playgroud)
但是以下各项的含义是什么?
d2, = values[s] ## values[s] is a string and at this point len(values[s]) is 1
Run Code Online (Sandbox Code Playgroud)
如果len(values[s]) == 1,那么这个陈述与此有何不同d2 = values[s]?
关于在作业中使用下划线的另一个问题:
_,s = min((len(values[s]), s) for s in squares if len(values[s]) > 1)
Run Code Online (Sandbox Code Playgroud)
下划线是否具有基本上丢弃列表中返回的第一个值的效果?
我正在看一些张量流的东西,我理解 for 循环,或者至少我认为我理解,但是我遇到for _ in range(20)并想知道在这种情况下 _ 的含义是什么。我习惯了 for x in range 或 for i in range 的东西并理解这些内容,但无法理解我在下划线上读到的内容
可能重复:
如何在for循环中声明未使用的变量?
在Python中,命名一个不会被使用的变量的最佳实践是什么?这是一个奇怪的问题,但对于我的具体情况,我有一个(键,值)元组,我只对值感兴趣.我的用例的基本演示:
some_stuff = [("key", "value"), ("key2", "value")]
for _, value in some_stuff:
pass # TODO: do something really important with value
Run Code Online (Sandbox Code Playgroud)
我在Eclipse中注意到,命名变量_或带_前缀(例如_k)将不会显示未使用的变量警告,并且删除_前缀会导致警告被引发,但这可能只是一个奇怪的/"功能"在Eclipse中而不是Python最佳实践..
我在熊猫里有一个df
import pandas as pd
df = pd.DataFrame(['AA', 'BB', 'CC'], columns = ['value'])
Run Code Online (Sandbox Code Playgroud)
我想迭代df中的行.对于每一行我想要行s value and next row的值类似(它不起作用):
for i, row in df.iterrows():
print row['value']
i1, row1 = next(df.iterrows())
print row1['value']
Run Code Online (Sandbox Code Playgroud)
结果我想要
'AA'
'BB'
'BB'
'CC'
'CC'
*Wrong index error here
Run Code Online (Sandbox Code Playgroud)
在这一点上,我有办法解决这个问题
for i in range(0, df.shape[0])
print df.irow(i)['value']
print df.irow(i+1)['value']
Run Code Online (Sandbox Code Playgroud)
有没有更有效的方法来解决这个问题?
鉴于[1,2,3,4,5],我该怎么办呢
1/1, 1/2, 1/3,1/4,1/5, ...., 3/1,3/2,3/3,3/4,3/5,.... 5/1,5/2,5/3,5/4,5/5
Run Code Online (Sandbox Code Playgroud)
我想存储所有结果,找到最小值,并返回用于找到最小值的两个数字.所以在我上面描述的情况下,我想回来(1,5).
所以基本上我想做点什么
每个元素i列表中的映射跨所有元素一些功能列表中,以i与j作为参数结果存储在主列表,发现在主列表中的最小值,并返回参数i,j用于计算该最小值.
在我真正的问题中,我有一个列表对象/坐标,我使用的函数采用两个坐标并计算欧氏距离.我试图找到任意两点之间的最小欧氏距离,但我不需要花哨的算法.
假设我在一个小应用程序中有以下字典.
dict = {'one': 1, 'two': 2}
Run Code Online (Sandbox Code Playgroud)
如果我想将具有dict名称和所有内容的确切代码行写入文件,该怎么办?python中有一个函数可以让我这样做吗?或者我是否必须先将其转换为字符串?转换它不是问题,但也许有一种更简单的方法.
我不需要将它转换为字符串的方法,我可以做.但如果有一个内置函数可以为我做这个,我想知道.
为了说清楚,我想写的文件是:
write_to_file("dict = {'one': 1, 'two': 2}")
Run Code Online (Sandbox Code Playgroud) 例如,如果我的文本文件是:
blue
green
yellow
black
Run Code Online (Sandbox Code Playgroud)
这里有四行,现在我想得到四个结果.我怎样才能做到这一点?
我有一个多线程函数,我想要一个使用状态栏tqdm。有没有一种简单的方法可以显示状态栏ThreadPoolExecutor?正是并行化部分使我感到困惑。
import concurrent.futures
def f(x):
return f**2
my_iter = range(1000000)
def run(f,my_iter):
with concurrent.futures.ThreadPoolExecutor() as executor:
function = list(executor.map(f, my_iter))
return results
run(f, my_iter) # wrap tqdr around this function?
Run Code Online (Sandbox Code Playgroud)