相关疑难解决方法(0)

array_reduce()不能用作PHP的关联数组"reducer"吗?

我有一个关联数组$assoc,需要在此上下文中将其缩减为字符串

$OUT = "<row";
foreach($assoc as $k=>$v) $OUT.= " $k=\"$v\"";
$OUT.= '/>';
Run Code Online (Sandbox Code Playgroud)

如何以优雅的方式做同样的事情,但使用array_reduce()


array_walk()功能相近的算法(性能较低,易读性较差),

 array_walk(  $row, function(&$v,$k){$v=" $k=\"$v\"";}  );
 $OUT.= "\n\t<row". join('',array_values($row)) ."/>";
Run Code Online (Sandbox Code Playgroud)

丑陋的解决方案array_map()(并再次join()作为减速器):

  $row2 = array_map( 
    function($a,$b){return array(" $a=\"$b\"",1);},
    array_keys($row),
    array_values($row)
  ); // or  
  $OUT ="<row ". join('',array_column($row2,0)) ."/>";
Run Code Online (Sandbox Code Playgroud)

PS:显然PHP array_reduce()不支持关联数组(为什么??).

php associative-array mapreduce

13
推荐指数
3
解决办法
2万
查看次数

两组间隔的差异

我正在尝试编写一些代码来计算两组间隔A - B之间的差异,间隔端点是整数,但我很有希望得到有效的解决方案,任何建议都会得到很多赞赏的例子:[(1,4) ),(7,9)] - [(3,5)] = [(1,3),(7,9)]

这是迄今为止我尝试过的最好的(两个列表已经排序)

class tp():
   def __repr__(self):
       return '(%.2f,%.2f)' % (self.start, self.end)
   def __init__(self,start,end): 
       self.start=start
       self.end=end



z=[tp(3,5)] #intervals to be subtracted
s=[tp(1, 4)),tp(7, 9), tp(3,4),tp(4,6)]

for x in s[:]:
   if z.end < x.start:
    break
   elif z.start < x.start and z.end > x.start and z.end < x.end:
    x.start=z.end
   elif z.start < x.start and z.end > x.end:
    s.remove(x)
   elif z.start > x.start and z.end < x.end:
    s.append(tp(x.start,z.start))
    s.append(tp(z.end,x.end))
    s.remove(x)
   elif z.start > x.start and z.start < …
Run Code Online (Sandbox Code Playgroud)

python algorithm intervals set-difference

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

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

映射python2与python3

我是初学python用户,我在python2.7和python3.4.3上运行了以下代码

import matplotlib.pyplot as plt
import numpy as np
import scipy.stats as stats

alpha = 1
n = 100

u = stats.uniform(0,1)
F_inverse = lambda u: 1/alpha*np.log(1/(1-u))
v = np.array(map(F_inverse, u.rvs(n)))
print(v)

fig, ax = plt.subplots(1,1)
stats.probplot(v, (1,), dist='expon', plot=ax)
plt.show()
Run Code Online (Sandbox Code Playgroud)

在python2上我得到一个像这样的好数组:

array([  2.29133808e+00,   1.63236151e+00,   6.77776227e-01,
         3.33668250e-01,   1.77830890e+00,   3.06193068e-01,
         2.10677775e+00,   1.30525788e-01,   2.97056775e-01,
                           ...
         1.31463775e+00,   1.41840428e-03,   8.60594737e-01,
         1.80644880e-01])
Run Code Online (Sandbox Code Playgroud)

在python3上,我得到这个:

array(<map object at 0x7f8aab6f3ef0>, dtype=object)
Run Code Online (Sandbox Code Playgroud)

如果我改变了这个:

v = np.array(map(F_inverse, u.rvs(n)))
Run Code Online (Sandbox Code Playgroud)

v = list(map(F_inverse, u.rvs(n)))
Run Code Online (Sandbox Code Playgroud)

它在两者上工作正常,但我想要使用数组.有没有办法让这个与np.array一起使用?

python arrays numpy higher-order-functions python-3.x

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

如何收集列表、字典等中重复计算的结果(或制作修改每个元素的列表的副本)?

Stack Overflow 上有很多关于这个一般主题的问答,但它们要么质量很差(通常是初学者的调试问题暗示的),要么以其他方式错过了目标(通常是不够通用)。至少有两种极其常见的方法会使幼稚的代码出错,初学者从关于循环的规范中获益更多,而不是从将问题作为拼写错误或关于打印所需内容的规范中获益。所以这是我尝试将所有相关信息放在同一个地方。

假设我有一些简单的代码,可以对一个值进行计算x并将其分配给y

y = x + 1

# Or it could be in a function:
def calc_y(an_x):
    return an_x + 1
Run Code Online (Sandbox Code Playgroud)

现在我想重复计算 的许多可能值x。我知道for如果我已经有要使用的值列表(或其他序列),我可以使用循环:

xs = [1, 3, 5]
for x in xs:
    y = x + 1
Run Code Online (Sandbox Code Playgroud)

while或者,如果有其他逻辑来计算值序列,我可以使用循环x

def next_collatz(value):
    if value % 2 == 0:
        return value // 2
    else:
        return 3 * value + 1

def collatz_from_19():
    x = 19
    while x != 1:
        x …
Run Code Online (Sandbox Code Playgroud)

python iteration list-comprehension

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

功能方式替换reduce()

在Python 3中,reduce()已经移动到functools.reduce()并且显然最好使用列表推导或普通循环以获得更好的可读性.

我想打印列表中所有元素的XOR'ed值.

# My implementation with functools
from functools import reduce
print(reduce(lambda a, b: a^b, [1, 3, 2, 3, 4, 4, 5, 2, 1]))
Run Code Online (Sandbox Code Playgroud)

我有这个:

# My implementation without functools
def XOR(x):
    ans = 0
    for i in x:
        ans = ans ^ i
    return ans

print(XOR([1, 3, 2, 3, 4, 4, 5, 2, 1]))
Run Code Online (Sandbox Code Playgroud)

如何在不编写更多功能版本的代码reduce()

(请提供Python 3中的参考或代码,如果有的话.)

python python-3.x

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

过滤函数中的Lambda?

我发现教程在python中使用lambda.在尝试执行第3个示例时,我发现结果与教程中的结果不同.我99%肯定我的代码是正确的,但在这里它仍然是.

my_list = [2,9,10,15,21,30,33,45]

my_new_list = filter(lambda x: x % 3 == 0, my_list)
print(my_new_list)
Run Code Online (Sandbox Code Playgroud)

结果是: <filter object at 0x004F39F0>

要记住的事情:

  • 我正在使用Python 3.4.2
  • 使用Python 2.7.2正常工作并返回 [9, 15, 21, 30, 33, 45]

据我所知,它在Python 3.4+中不起作用; 我更好奇为什么它不起作用,并且寻找一种平等的方式来做这个,有或没有lambda.

python python-3.x

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

解决python 3 vs python 2中的map函数问题

我对使用python进行函数式编程感兴趣,并且正在阅读Mary Rose Cook的博客文章函数式编程的实用介绍

显然,它是用python 2编写的,如下所示:

name_lengths = map(len, ["Mary", "Isla", "Sam"])

print name_lengths
# => [4, 4, 3]
Run Code Online (Sandbox Code Playgroud)

在Python 3中产生以下结果:

<map object at 0x100b87a20>
Run Code Online (Sandbox Code Playgroud)

我有两个问题:

  1. 为什么会这样呢?
  2. 除了将地图对象转换为列表然后使用numpy之外,还有其他解决方案吗?

python functional-programming python-2.7 python-3.x

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

如何删除字典列表中的空字典?

如何从dict列表中删除空dict为,

{
 "ages":[{"age":25,"job":"teacher"},
         {},{},
         {"age":35,"job":"clerk"}
        ]
}
Run Code Online (Sandbox Code Playgroud)

我是python的初学者.提前致谢.

python

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

转置文本块

我在字符串中有一个1和0的块:

1111110000111111
1110110110110111
1101010110101011
1011100110011101
0001111111111011
1000110111110111
0100010011110000
0110000001111110
0111000000110110
0000100010010100
1110110011000111
1101111111100011
1011100110000011
1101010111100001
1110110110111101
1111110000111111
Run Code Online (Sandbox Code Playgroud)

我想转置它,好像它是一个矩阵 - 但保持在字符串中.

在我开始编写嵌套for循环之前,有一种更简单的方法吗?

python string

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