在MATLAB中对字符串进行排序的最佳方法是什么,尊重可能出现在字符串中间的数字?
以下示例说明了我的问题.401是数字上高于6的值.因此,当按升序排序时,Ie401sp2字符串应列在Ie6字符串之后.在此示例中,请注意如何对包含数字的以下字符串进行排序.
--- --- Matlab的(不选我所希望的方式)
Ie4_01
Ie4_128
Ie401sp2
IE5
Ie501sp2
IE6
--- Windows 7的---(我想MATLAB的排序方法)
Ie4_01
Ie4_128
IE5
IE6
Ie401sp2
Ie501sp2
Windows 7尊重出现在字符串中间的数字的相对值.在Matlab中执行此操作的最佳方法是什么?我试图避免在一个小的切线上重新发明轮子.
您如何将项目返回到 queue.Queue?如果任务失败,这将在线程或多处理中很有用,这样任务就不会丢失。
queue.Queue.get()的文档说该函数可以“从队列中删除并返回一个项目”,但我相信这里使用的“返回”一词是指将项目返回给调用线程的函数,不将其放回项目队列。下面的示例代码证明了这一点,它只是在主线程的第二次queue.Queue.get()调用上无限阻塞,而不是print()在线程中进行调用。
import time
import threading
import queue
def threaded_func():
thread_task = myqueue.get()
print('thread_task: ' + thread_task)
myqueue = queue.Queue()
myqueue.put('some kind of task')
main_task = myqueue.get()
print('main_task: ' + main_task)
t = threading.Thread(target=threaded_func)
t.daemon = True
t.start()
time.sleep(5)
myqueue.get() # This blocks indefinitely
Run Code Online (Sandbox Code Playgroud)
我不得不相信有一种简单的方法可以将任务放回去,那么它是什么?在两个操作中调用task_done()然后put()使用任务将其放回队列不是原子性的,因此可能会导致丢失项目。
一种可能但笨拙的解决方案是尝试再次执行任务,但是您必须添加一些额外的行来处理这种复杂性,而且我什至不确定所有失败的任务是否一定能在其中恢复道路。