You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向量元素左移技术咨询:如何将指定非零元素左移至左侧?

Solution to Push Non-Zero Elements From '04' to the Left

Hey there! Let's break down how to solve this problem. The goal is to take your hex vector, find where the element '04' is located, then shift all non-zero elements in the portion starting at that position to the left (filling the remaining spots with zeros). Here's a clear, step-by-step approach and implementation:

Step-by-Step Approach

  • First, locate the index of the '04' element in your vector. If '04' isn't present, we leave the vector unchanged since there's nothing to process.
  • Next, extract the subarray starting from that '04' position to the end of the vector.
  • Filter out all '00' elements from this subarray—these are the zeros we want to move to the right.
  • Calculate how many zeros we need to add back to match the original length of the subarray (we don't want to alter the total length of the vector).
  • Replace the original subarray with the filtered non-zero elements followed by the required number of '00's.
  • Combine the unchanged prefix (elements before '04') with the processed subarray to get your final result.

Example Implementation (Python)

Here's a simple, readable function that does exactly this:

def push_non_zero_from_start(vector, start_element='04'):
    # Find the first occurrence of '04' in the vector
    try:
        start_idx = vector.index(start_element)
    except ValueError:
        # Return a copy of the original vector if '04' isn't found
        return vector.copy()
    
    # Process the subarray starting at '04'
    subarray = vector[start_idx:]
    # Collect all non-zero elements (exclude '00')
    non_zero_elements = [elem for elem in subarray if elem != '00']
    # Calculate how many zeros we need to append to maintain length
    num_zeros_needed = len(subarray) - len(non_zero_elements)
    # Create the processed subarray
    processed_subarray = non_zero_elements + ['00'] * num_zeros_needed
    
    # Combine the prefix and processed subarray for the final result
    return vector[:start_idx] + processed_subarray

Testing with Your Examples

Let's run this function against your input vectors to see it in action:

First Example Input:

['31', '04', '00', '08']
The output will be:
['31', '04', '08', '00']
We moved the non-zero '08' left, replaced the '00' in its path, and added a '00' at the end of the subarray to keep the total length the same.

Second Example Input:

['31', '48', '00', '00']
Since there's no '04' in this vector, the function returns the original vector unchanged:
['31', '48', '00', '00']

Quick Notes

  • This assumes your vector elements are two-digit hex strings (like '31', '04'). If you're working with integer values instead, just adjust the comparison to check for 0 instead of '00'.
  • If there are multiple '04' elements, the function uses the first occurrence (since list.index() returns the first match). Let me know if you need to handle all occurrences, and we can tweak the logic!

内容的提问来源于stack exchange,提问作者Gordon Hales

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 03:30:22