我正在尝试一种惯用且理想的功能方式来将 Kotlin 中的列表拆分为子列表。
想象一下输入["aaa", "bbb", "", "ccc", "", "ddd", "eee", "fff"],我想返回[["aaa", "bbb"], ["ccc"], ["ddd", "eee", "fff"]]给定的谓词string.isEmpty()。
使用 for 循环和累加器就可以非常简单地实现;但我还没有找到一种我认为足够可读的功能性编写方法。
到目前为止我最好的结果是:
lines.foldIndexed(Pair(listOf<List<String>>(), listOf<String>()), { idx, acc, line ->
when {
idx + 1 == lines.size -> {
Pair(acc.first + listOf(acc.second + line), listOf())
}
line.isEmpty() -> {
Pair(acc.first + listOf(acc.second), listOf())
}
else -> {
Pair(acc.first, acc.second + line)
}
}
}).first
Run Code Online (Sandbox Code Playgroud)
本质上,我使用的是fold带有双累加器的双累加器,它跟踪当前列表并在找到谓词时重置。该列表将输入到此时的完整结果中。我正在使用FoldIndexed来获取我的最后一个列表。
大家知道有什么更好的办法吗?
作为参考,循环版本可以是
val data = mutableListOf<String>()
var currentData …Run Code Online (Sandbox Code Playgroud) 我有一个整数列表.
我想做的是对它们进行排序并删除所有重复项.我在网上看到了两种不同的解决方案.两者似乎都给出了与我期望的结果不同的结果.
a = integer_combinations(5, 5)
print a
>>[4, 8, 16, 32, 9, 27, 81, 243, 16, 64, 256, 1024, 25, 125, 625, 3125]
b = sorted(a)
print b
>>[4, 8, 9, 16, 16, 25, 27, 32, 64, 81, 125, 243, 256, 625, 1024, 3125]
c = dict().fromkeys(sorted(a)).keys()
print c
>> [32, 64, 4, 1024, 625, 8, 9, 256, 16, 81, 243, 3125, 25, 27, 125]
Run Code Online (Sandbox Code Playgroud)
另一种方法,使用集合:
d = list(set(b))
print d
>> [32, 64, 4, 1024, 625, 8, 9, …Run Code Online (Sandbox Code Playgroud) 我试图在任何地方连接到Python上的Twitter流API,但总是得到连接拒绝错误.
我在我的应用程序中使用Tweepy,并测试连接我正在使用可以在repo中找到的流示例.
HEre是代码的总结:
from tweepy.streaming import StreamListener
from tweepy import OAuthHandler
from tweepy import Stream
# Go to http://dev.twitter.com and create an app.
# The consumer key and secret will be generated for you after
consumer_key=""
consumer_secret=""
# After the step above, you will be redirected to your app's page.
# Create an access token under the the "Your access token" section
access_token=""
access_token_secret=""
class StdOutListener(StreamListener):
""" A listener handles tweets are the received from the stream.
This …Run Code Online (Sandbox Code Playgroud) 我是一个图像处理工程师,我使用Python作为原型语言.
大多数时候,当我得到数以千计的图像时,名为"imagen.jpg",n是增量.
所以我的程序的主要结构可能被视为:
def main_IP(imgRoot, stop_ncrement):
name = update_the_increment(imgRoot, stop_increment)
img = load_the_image(name)
out_img = process_image(img)
displays_images(img, out_img)
return out_img
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,从一个应用程序到另一个应用程序,唯一的变化是process_image函数.有没有办法让process_image作为输入插入?
我会得到一个泛型函数,原型为:main_IP(imgRoot,stop_increment,process_image)
谢谢 !朱利安
我知道有很多关于SO的相关问题,比如这一个或者这个问题,但由于某种原因我到目前为止无法获得任何工作.
我正在尝试创建一个批处理文件来连续安装几个软件:
这是我的批处理文件
set packages=(7zip.install, ^ :: for compression
notepadplusplus.install, ^ :: file editor
Firefox, ^
putty, ^
mysql -Version 5.5.30, ^
postgresql)
for %%i in %packages% do (
::echo %%i
cinst %%i
)
Run Code Online (Sandbox Code Playgroud)
一切正常,但对于mysql部分.这个空间实际上是一个分隔符,这意味着我得到了
E:\>(echo 7zip.install )
7zip.install
E:\>(echo notepadplusplus.install )
notepadplusplus.install
E:\>(echo Firefox )
Firefox
E:\>(echo putty )
putty
E:\>(echo mysql )
mysql
E:\>(echo -Version )
-Version
E:\>(echo 5.5.30 )
5.5.30
E:\>(echo postgresql )
postgresql
Run Code Online (Sandbox Code Playgroud)
我想最终得到的是
E:\>(echo mysql -Version 5.5.30 )
mysql -Version 5.5.30 …Run Code Online (Sandbox Code Playgroud) 我正在尝试在点亮元素中使用vaadin 徽章。
\n该文档提到“要在应用程序中使用这些类,请在 theme\xe2\x80\x99s theme.json 中启用它们”,但我没有这样的文件,所以这对我来说真的很困惑。大多数文档都集中在 Java 上,所以我猜这就是混乱的根源。到目前为止我只通过 NPM 安装了一些组件。
\n无论如何,我尝试创建一个frontend/themes/common-theme/theme.json文件,但到目前为止还没有成功。
这是我的元素目前的样子:
\nimport {LitElement, html} from \'lit\';\n\nimport \'@vaadin/vertical-layout\';\nimport \'@vaadin/horizontal-layout\';\n\nimport \'@vaadin/vaadin-lumo-styles/badge.js\';\n\nexport class PaymentLink extends LitElement {\n static properties = {\n version: {},\n link : { Object}\n };\n\n constructor() {\n super();\n }\n\n render() {\n return html`\n <vaadin-horizontal-layout>\n <a href="${this.link.url}">${this.link.id}</a>\n <span theme="badge">Pending</span>\n </vaadin-horizontal-layout>\n `;\n }\n\n}\ncustomElements.define(\'payment-link\', PaymentLink);\nRun Code Online (Sandbox Code Playgroud)\n有人可以给我看看光吗?这是一个 stackblitz 示例:https://stackblitz.com/edit/lit-element-jjzdpa ?file=src/index.js
\n我试图使用锁来写入和读取线程中的数据,但有一个我无法解决的死锁:s.
这就是事情.由于一个在我的问题中没用的原因,我必须启动一个自己启动其他线程的线程.所以我有:main - > send_gps_data - > stream_session
我在stream_session中写入gpsData,在无限循环中(每秒输出一个新报告).我想在我的主要内容中阅读这些数据.为了避免数据损坏,我想使用阻塞锁.
这是代码:
def main():
lock = threading.Lock()
thread_gps = threading.Thread(None, send_gps_data, args=(gpsData, lock))
gps_thread_gps.start()
# to allow interrupt
while(gm.runn):
try:
time.sleep(0.5)
print "!"
lock.acquire():
gm.display_gpsdata(gpsData)
lock.release()
print "!!"
except KeyboardInterrupt:
gm.runn = 0
def send_gps_data(gpsData, lock):
global runn
gps_thread = threading.Thread(None, stream_session, args=(gpsData, lock))
gps_thread.start()
while(runn):
time.sleep(1)
gps_thread._Thread__stop()
sys.exit(0)
def stream_session(gpsData, session, lock):
for report in session:
if report.get("class") == "TPV":
print ":"
lock.acquire()
fill_gpsdata(gpsData, session, report)
lock.release
print "::"
Run Code Online (Sandbox Code Playgroud)
我的问题是我最终陷入僵局.这是我得到的代码输出:!!!!:::!:
它阻止了它...所以似乎我的锁定版本从未被考虑过... …
我目前使用枚举定义如下:
public enum Language{
English("english", "eng", "en", "en_GB", "en_US"),
German("german", "de", "ge"),
Croatian("croatian", "hr", "cro"),
Russian("russian");
private final List<String> values;
Language(String ...values) {
this.values = Arrays.asList(values);
}
public List<String> getValues() {
return values;
}
public static Language find(String name) {
for (Language lang : Language.values()) {
if (lang.getValues().contains(name)) {
return lang;
}
}
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
事实是,我将不得不使用相同的方法和构造函数使用几个枚举.在我的例子中唯一改变的是枚举本身的值.
有没有办法让我创建一个我可以重用的枚举的超类?
所以我可以这样做:
public Language extends(specializedEnum){
English("english", "eng", "en", "en_GB", "en_US"),
German("german", "de", "ge"),
Croatian("croatian", "hr", "cro"),
Russian("russian");
}
Run Code Online (Sandbox Code Playgroud)
提前谢谢你!
我正在开发一个小型Web应用程序.我已经完成了服务器端代码,但我正在努力与客户端javascript.
我有一个每秒更新的html文件.此文件是完全静态的,我仅将其用于日志目的.
这个想法几乎完全相同,但在客户端进行了自动更新.
为此我想使用ajax进行数据库轮询.
我在这里实现了第一个版本,它只是打印相同的html文件,并且应该每秒重新加载它.
事情就是不更新,即使我在我的javascript控制台客户端没有看到任何错误.找到该文件,因为它正确加载,我没有看到为什么它不会更新我的div的任何原因.
这是我的代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<!-- Using Google CDN -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>
(function worker() {
$.ajax({
url : 'http://jlengrand.pythonanywhere.com/static/leader.html',
success: function(data) {
$('.text').html(data);
},
complete: function() {
setTimeout(worker, 1000);
}
});
})();
</script>
</head>
<body>
<div class="text">
To be loaded <br />
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我尝试了本地(但文件较小)并且工作正常.
我知道重新加载整个文件并不聪明,但我想逐步构建,因为这是我第一次使用JavaScript开发.
我错过了什么?